Letters uit een String halen?

Status
Niet open voor verdere reacties.

USeagle

Gebruiker
Lid geworden
16 mei 2007
Berichten
42
Hallo iedereen,

Voor een school opdr. moet ik uit een willekeurig stuk tekst (aantal characters onbelanrijk) alle letter uit het alfabet uitlezen en de frequentie (in procenten, afronden) van elke letter in een "staafdiagram" weer geven, en spaties en andere leestekens moet hij weglaten.
bijv: de tekst: "Hallo, hoe gaat het?"

Nu moet mijn prog. gaan kijken naar alle letters bij a hoevaak komt hij voor, in dit geval 3 = ...%
de uitvoer moet dan zijn bv:

(Dit stelt dan de staafdiagram voor)
a = xxx
b = x
c =
d = xxxx

Voor zover de opdracht.

Ik dacht zelf aan ongeveer het volgende:
public static void main(String[] args){
// string aanmaken met daarin een stuk tekst
String tekst = "Hallo, hoe gaat het";
// array aanmaken, om te tellen hoevaak een letter voorkomt (heb nu alleen a,b en c wanneer dit werkt kan ik op de zelfde manier de rest van het alfabet toevoegen.)
int A[]; int B[]; int C[];

Kan iemand van jullie mij misschien helpen, ik ben nog een noob wat java betreft. Mocht er nog iets onduidelijk zijn dan kan ik dat misschien nog wel beter toelichten.

Alvast bedankt

USeagle
 
Je idee is goed...
Maar je uitvoering nog niet helemaal.

Want het volstaat om gebruik te maken van 1 array. Zoals jij het weergeeft wil je gebruik maken van 26 arrays.

Zoals ik het zou doen:

Code:
String _letters = "Hallo, dit is een test";
Dan die string 26 keer doorlopen met een dubble for-loop
om letters te gaan tellen

Code:
for( i = 0 ; i < 26 ; i++){
    for( j = 0 ; j < _letters.length; j++){
         //hier wat code invoeren
    }
}

- een functie schrijven die dan de nieuwe array, waar de totalen in staan van alle letters, de aantallen op te tellen, zodat je een totaal krijgt van de "echte karakters".

- De paint functie aanroepen en daarmee de staafdiagram tekenen.

Code:
public void paint(Graphics g){
//hier nog wat code toevoegen
g.fillRect(x,y,length,heigth);
}
 
Ten eerste: Bedankt!!!

Ik snap wel hoe je het bedoel alleen ik heb geen idee wat ik in moet vullen bij:
//hier wat code invullen

ik snap ook het idee van een for loop wel, alleen verder, (ik ben niet zo goed in Java :(, maar dat kom wel :D hoop ik!!!! )
 
Het is een schoolopdracht.. dus ik ga je niet alle code voorkauwen ;)
op de plaatsen waar staat: "//hier wat code invullen" zal je zelf nog moeten bedenken hoe je het verder na wilt gaan en door wilt lopen :)
 
ja okee is goed in elk geval bedankt ik ga verder puzzelen :P
 
Wat heb je allemaal al?
Laat eens wat code zien, dan kunnen we kijken waar het mogelijk fout gaat.
 
Waar gaat het fout!!!! Ik weet niet eens waar ik moet beginnen.

Ik gedachte weet ik wel ongeveer hoe het moet, alleen ik krijg de code er niet bij.

Code:
for( i = 0; i < 26 ; i++){
            for( j = 0; j < _letters.length(); j++){
                
                System.out.println(+i);
                System.out.println(+j);
            }
        }

ik heb echt geen idee wat in die loop moet komen :confused:
heb op internet gezocht, maar ja... naar wat moet ik zoeken, kom daarmee niet verder.

groeten

bijna Desperate USeagle :P
 
Ik heb dit voorbeeld gvonden, alleen ik krijg een error

Code:
public static void main(String args[]){
        char[] chars = createArray();
        
        System.out.println("The Lowercase letters are:");
        displayArray(chars);
        
        int[] counts = countLetters(chars);
        
        System.out.println();
        System.out.println("The occurences of each letter are:");
        displayCounts(counts);
    }
    public static char[] createArray() {
        char[] chars = new char[100];
        
        for (int i = 0; i < chars.length; i++)
            chars[i] = RandomCharacter.getRandomLowerCaseLetter();
            
            return chars;
        }
    
    public static void displayArray(char[] chars) {
        for (int i = 0; i < chars.length; i++) {
            if ((i + 1) % 20 == 0)
                System.out.println(chars[i] = " ");
            else
                System.out.print(chars[i] + " ");
        }
    }
    public static int[] countLetters(char[] chars) {
        int[] counts = new int[26];
        
        for (int i = 0; i < chars.length; i++)
            counts[chars[i] - 'a']++;
        
        return counts;
    }
    public static void displayCounts(int[] counts) {
        for (int i = 0; i <counts.length; i++) {
            if ((i + 1) % 10 == 0)
                System.out.println(counts[i] + " " + (char)(i + 'a'));
            else
                System.out.print(counts[i] + " " + (char)(i + 'a') + " ");
        }
    }
    
}

kan iemand mij vertellen waarom, misschien dat ik vanhier uit verder kan komen
 
init:
deps-jar:
Compiling 1 source file to D:\PRJ02\INFPRJ02\INFPROG01Praktijk\build\classes
D:\PRJ02\INFPRJ02\INFPROG01Praktijk\src\infprog01praktijk\Praktijk01.java:28: cannot find symbol
symbol : variable RandomCharacter
location: class infprog01praktijk.Praktijk01
chars = RandomCharacter.getRandomLowerCaseLetter();
D:\PRJ02\INFPRJ02\INFPROG01Praktijk\src\infprog01praktijk\Praktijk01.java:36: incompatible types
found : java.lang.String
required: char
System.out.println(chars = " ");
2 errors
BUILD FAILED (total time: 0 seconds)

Sorry vergeten
 
1e foutmelding:
Code:
chars[i] = RandomCharacter.getRandomLowerCaseLetter();

Waar heb je de variable: RandomCharacter gedefinieert?
Want hij kan deze niet vinden.

2e foutmelding:

Code:
if ((i + 1) % 20 == 0)
                System.out.println(chars[i] = " ");
            else
                System.out.print(chars[i] + " ");

Daar moet je enkele quotes gebruiken ' ' ipv dubbele " ".
Enkele quotes is een char, dubbele quotes is een String.
Daarnaast heb je een = staan ipv een +
 
Laatst bewerkt:
uuhhmm blijkbaar niet gedefinieerd.

waar moet ik dat eigelijk precies doen want heb een aantal dingen geprobeerd, maar blijf errors krijgen

nu heb ik hem
Code:
public static char[] createArray() {
        char[] chars = new char[100];
        char alfabet = RandomCharater;
        
        for (int i = 0; i < chars.length; i++)
            chars[i] = RandomCharacter.getRandomLowerCaseLetter();
        
        return chars;

en krijg dan de error:

Compiling 1 source file to D:\PRJ02\INFPRJ02\INFPROG01Praktijk\build\classes
D:\PRJ02\INFPRJ02\INFPROG01Praktijk\src\infprog01praktijk\Praktijk01.java:28: cannot find symbol
symbol : variable RandomCharater
location: class infprog01praktijk.Praktijk01
char alfabet = RandomCharater;
D:\PRJ02\INFPRJ02\INFPROG01Praktijk\src\infprog01praktijk\Praktijk01.java:31: cannot find symbol
symbol : variable RandomCharacter
location: class infprog01praktijk.Praktijk01
chars = RandomCharacter.getRandomLowerCaseLetter();
2 errors
BUILD FAILED (total time: 0 seconds)
 
Code:
char alfabet = RandomChara[color=red]c[/color]ter;

typefoutje


Maar waar maak je de variable: RandomCharacter aan?
Want die kan hij die niet vinden.

bijv:
Code:
private char RandomCharacter;
 
Laatst bewerkt:
ojaa stom :(

maar nog steeds error(s)

Compiling 1 source file to D:\PRJ02\INFPRJ02\INFPROG01Praktijk\build\classes
D:\PRJ02\INFPRJ02\INFPROG01Praktijk\src\infprog01praktijk\Praktijk01.java:28: cannot find symbol
symbol : variable RandomCharacter
location: class infprog01praktijk.Praktijk01
char alfabet = RandomCharacter;
D:\PRJ02\INFPRJ02\INFPROG01Praktijk\src\infprog01praktijk\Praktijk01.java:31: cannot find symbol
symbol : variable RandomCharacter
location: class infprog01praktijk.Praktijk01
chars = RandomCharacter.getRandomLowerCaseLetter();
2 errors
BUILD FAILED (total time: 0 seconds)

Heb ik het wel goed gedeclareed
 
Zou je anders je complete code eens neer kunnen zetten?
Inclusief declaraties etc. ?
 
Code:
package infprog01praktijk;

public class Praktijk01 {
    
    public static void main(String args[]){
        
        char[] chars = createArray();
        
        System.out.println("The Lowercase letters are:");
        displayArray(chars);
        
        int[] counts = countLetters(chars);
        
        System.out.println();
        System.out.println("The occurences of each letter are:");
        displayCounts(counts);
      
    }
    public static char[] createArray() {
        char[] chars = new char[100];
        char alfabet = RandomCharacter;
        
        for (int i = 0; i < chars.length; i++)
            chars[i] = RandomCharacter.getRandomLowerCaseLetter();
        
        return chars;
        
    }
    public static void displayArray(char[] chars) {
        for (int i = 0; i < chars.length; i++) {
            if ((i + 1) % 20 == 0)
                System.out.println(chars[i] = ' ');
            else
                System.out.print(chars[i] + ' ');
        }
    }
    public static int[] countLetters(char[] chars) {
        int[] counts = new int[26];
        
        for (int i = 0; i < chars.length; i++)
            counts[chars[i] - 'a']++;
        
        return counts;
    }
    public static void displayCounts(int[] counts) {
        for (int i = 0; i <counts.length; i++) {
            if ((i + 1) % 10 == 0)
                System.out.println(counts[i] + " " + (char)(i + 'a'));
            else
                System.out.print(counts[i] + " " + (char)(i + 'a') + " ");
        }
    }
    
}

Ik heb deze code uit een boek, maar... ja blijkbaar niet echt een betrouwbaar boek:P
 
Code:
public static char[] createArray() {
        char[] chars = new char[100];
        char alfabet = RandomCharacter; //[COLOR="Red"]1, 2[/COLOR]
        
        for (int i = 0; i < chars.length; i++)
            chars[i] = RandomCharacter.getRandomLowerCaseLetter();//[COLOR="Red"]3[/COLOR]
        
        return chars;
        
    }

hier gaat het fout.

1. Je hebt geen variabele RandomCharacter
2. Hier zet je de waarde van RandomCharacter in de variabele alfabet, maar waar gebruik je de variabele alfabet nog meer?
3. Als RandomCharacter een char zou zijn, dan zou er ook nog een functie moeten zijn: getRandomLowerCaseLetter() die daar dan een lowercase van maakt als het een uppercase is.

Als je alle characters van het alfabet hoofdletter en kleine letters in een chararray wil hebben dan kan je zoiets gebruiken:

Code:
public static char[] createArray() {
        char[] chars = new char[52];
        for (int i = 0; i < 26; i++) {
            chars[i] = (char)('a' + i);
        }
        for (int i = 26; i < 52; i++) {
            chars[i] = (char)('A'+ (i-26)); //-26 omdat je met 'A' wilt beginnen
        }
        return chars;
        
    }

de (char) is een typecast. Dit is nodig omdat je dan een int erbij op kan tellen.
bijvoorbeeld: 'a' + 3 = 'd'
 
Laatst bewerkt:
Code:
/*
 * PROG01.java
 * Naam bedrijf: HR
 * Naam autheur : 0784841 Kevin Jansen
 * Created on 25-06-2007
 *
 * Omschrijving:
 * Geef een  tekst, en het programma geeft de freq. van het aantal letters.
 */

package prog01;
import javax.swing.JOptionPane;

public class Prog01Praktijk {
    
    public static void main(String[] args) {
        //Geef tekst.
        String geefTekst = JOptionPane.showInputDialog(null, "Voer tekst",
                "Prog01 Praktijk:", JOptionPane.QUESTION_MESSAGE);
        
        //tekst in lowercase letters.
        String tekst = geefTekst.toLowerCase();
        
        //int array van 26
        int[] alfabet = new int[26];
        
        //letters optellen en in de array zetten.
        for (int i = 0; i < tekst.length(); i++) {
            char[] characters = tekst.toCharArray();
            char character = characters[i];
            if ((character >= 'a') & (character <= 'z')) {
                alfabet[character - 'a']++;
            }
        }
        
        //letters in array
        int count = 0;
        for (int i = 0; i < alfabet.length ; i++) {
            count += alfabet[i];
        }
        
        String titel = "Frequentie van de letters: \n\nIngevoerde tekst: " + geefTekst + "\n\n";
        
        //geef een + voor de frequentie van de letters
        int Q;
        for (char i = 'a'; i <= 'z'; i ++ ) {
            Q = ((alfabet[i - 'a']*100) / count);
            titel += i + ": \t";
            for(int j = 0; j < Q; j++ )
                titel += "+  ";
            titel += "\n" ;
        }
        
        //eindresultaat
        JOptionPane.showMessageDialog(null, titel);
    }
}

ik heb nu de volgende code die werkt wel, alleen ik mag letters die niet in de string zitten weergeven hoe doe ik dat
 
Wat je kan doen is een array maken met alle characters.
Als er dan een van in de string voorkomt, dan haal je die uit de array van alle letters die er niet in zitten.

Code:
char[] charsNietInString = {'a', 'b', etc};

En dan elke keer dat je een char heb gehaald uit de string.
Dan zoiets...
Code:
if(charsNietInString[charUitString] != null){
  charsNietInString[charUitString] = null;  // of als die null niet wil kan je er @ ofzo van maken. Dat je die op het eind er dan uitfiltert.
}

Als je dan string hebt doorlopen kan je daar alle chars uit halen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan