ALIEN.DE - Forum
[Board Regeln] [Aktuelle Themen] [Wer ist wo] [UFO-Datenbanken] [Kornkreis-Datenbank] [Wer ist im Chat] [Zum Chat] [Versand für Grenzwissenschaften] [ALIEN.DE - Blog] [UFO-Wiki] [ALIEN.DE - Hauptseite]
Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Der nächste Themenabend im ALIEN.DE - Chat:
Jeden Montag um 20.00 MESZ | Thema: ALIEN.DE - Stammtisch

ALIEN.DE - Forum » Community Bereich » Computer, Internet und Spiele » JAVA-String hack » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen JAVA-String hack
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
sohar
Übersetzer


images/avatars/avatar-2665.jpg

Dabei seit: 31.08.2007
Beiträge: 1.846
Herkunft: Weltraum
Erstmalige Anmeldung: 31.08.2007

JAVA-String hack Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe einen Text in JAVA in einen String gesetzt, der heißt text.

Mein Vorhaben:

Ich will aus dem String, bei dem es sich um einen deutschen Text handelt, alle Wörter heraussieben, die mit großem Buchstaben anfangen. Diese setzt ich, falls sie dort noch nicht drinne sind, in eine HashMap, wobei jedes Wort einen Index kriegt.

Hier der Code, drunter stelle ich dann die Frage:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
int i=1;

HashMap<Int, String> hm = new HashMap<Int, String>;

for(e : text){

if(e.startsWith("A") | e.startsWith("B") | ... | e.startsWith("Z")){

if(hm1.containsValue(e)){

hm.put(i, e);

i++;

}
}
}



Frage:

if(e.startsWith("A") | e.startsWith("B") | ... | e.startsWith("Z")){

ist irgendwie nicht elegant. Ich habe ewig kein JAVA mehr programmiert, ich habe in der Referenz auch die Datenstruktur "String" nachgeschaut, hab' aber dennoch keinen Plan,wie ich das eleganter lösen könnte.

...diejenigen, bei denen es weihnachtet, mögen meinen Post natürlich bis nach dem Fest ignorieren Zwinker

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von sohar: 24.12.2011 17:19.

24.12.2011 17:18 sohar ist offline E-Mail an sohar senden Beiträge von sohar suchen Nehmen Sie sohar in Ihre Freundesliste auf
Geek Geek ist männlich
Gelegenheitsbesucher


Dabei seit: 10.02.2010
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die (Anfangs)Buchstaben sind ja char. Ein char kann auch als int-Wert repräsentiert werden.

Wenn ich mich nicht irre, dann sind alle Großbuchstaben aufeinander folgende Zahlen sprich n bis (n+26).

Nun nimmt man eine for-Schleife und geht einmal den Zahlenbereich von n bis n+26 durch.

Sollte es Lücken geben, oder Ausnahmen, dann nimmt man halt ein int-Array. Wenn man aber ein Array nimmt, dann kann man eigentlich schon ein char Array geben über das hinwegiteriert wird. ( char[] cArr = { 'A',...,'Z' } )

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
int i=1;
HashMap<Int, String> hm = new HashMap<Int, String>;
for(e : text){

for( int j = ANFANGSWERT; j < ENDWERT; ++j )
{
    if( e.startsWith( (char) i ) )
    {
         hm.put(i, e);
         ++i;
     }
}

//...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Geek: 24.12.2011 22:51.

24.12.2011 22:24 Geek ist offline E-Mail an Geek senden Beiträge von Geek suchen Nehmen Sie Geek in Ihre Freundesliste auf
sohar
Übersetzer


images/avatars/avatar-2665.jpg

Dabei seit: 31.08.2007
Beiträge: 1.846
Herkunft: Weltraum
Erstmalige Anmeldung: 31.08.2007

Themenstarter Thema begonnen von sohar
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe es jetzt so gemacht (zum Betrachten des Bildes bitte draufklicken!):

Problem ist jetzt, dass es sich bei dem text nunmehr um ein array handelt, aber dann muss ich eben noch einen Weg finden, wie ich den Ursprungsstring in enen Array umgewandelt kriege.

Vielen Dank auf jeden Fall Dir, o geek, für Deinen Tipp.

Dateianhang:
jpg sandb.jpg (31 KB, 89 mal heruntergeladen)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von sohar: 24.12.2011 22:57.

24.12.2011 22:55 sohar ist offline E-Mail an sohar senden Beiträge von sohar suchen Nehmen Sie sohar in Ihre Freundesliste auf
Geek Geek ist männlich
Gelegenheitsbesucher


Dabei seit: 10.02.2010
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hier bietet sich die Split Methode an, die von der String-Klasse angeboten wird.

Gehandhabt wird das so:

code:
1:
2:
3:
4:
5:
6:
7:

String ursprungsString = "Das ist ein String.";

String[] neuerString= ursprungsString.split(" ");



Der Inhalt von neuerString wäre dann { "Das", "ist", "ein", "String." }.

Wobei dann die Satzzeichen mit an den Einzelstring geheftet sind und dein Text vermutlich auch Satzzeichen enthalten wird.

Daher bietet es sich an statt der Angabe des Leerzeichens ( " " ), eine sogenannte RegularExpression (RegEx) zu verwenden.
Wenn ich mich nicht irre, dann müsste das mit den RegularExpressions dann so aussehen:

code:
1:
2:
3:
4:
String satz = "Das ist ein Satz, mit Komma.";
String[] s = satz.split("[\\W]");


Edit:

Mit ANFANGSWERT meinte ich eigentlich den Wert 65 (für A) und mit Endwert den Wert 91 ( da 90 Z ist).
Sonst reicht in der for-Schleife " j = 0; j < caplet.length; ++j ".
Wobei caplet.length besser ist, da d ja z.B. dein Array um Ü,Ä,Ö erweitern könntest, oder um andere Großbuchstaben aus anderen Sprachen. Und dann sparst du dir das Anpassen des Quelltextes an zwei Stellen.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Geek: 25.12.2011 01:52.

25.12.2011 01:38 Geek ist offline E-Mail an Geek senden Beiträge von Geek suchen Nehmen Sie Geek in Ihre Freundesliste auf
Alien Buster Alien Buster ist männlich
Roswell Experte


images/avatars/avatar-2857.gif

Dabei seit: 03.07.2006
Beiträge: 816

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

split("[\\W]") teilt Wörter mit Umlauten aber nicht korrekt.

Großschreibung würde ich persönlich prüfen mit:

code:
1:
2:
3:
4:
5:
6:
if (wort.length() > 0 &&
    wort.charAt(0) == Character.toUpperCase(wort.charAt(0)) &&
    wort.charAt(0) != Character.toLowerCase(wort.charAt(0)))
{
	// Großschreibung
}

Das spart das Anpassen des caplet Arrays unabhängig von der Sprache.

__________________

25.12.2011 05:09 Alien Buster ist offline E-Mail an Alien Buster senden Beiträge von Alien Buster suchen Nehmen Sie Alien Buster in Ihre Freundesliste auf
sohar
Übersetzer


images/avatars/avatar-2665.jpg

Dabei seit: 31.08.2007
Beiträge: 1.846
Herkunft: Weltraum
Erstmalige Anmeldung: 31.08.2007

Themenstarter Thema begonnen von sohar
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
if (wort.length() > 0 &&
    wort.charAt(0) == Character.toUpperCase(wort.charAt(0)) &&
    wort.charAt(0) != Character.toLowerCase(wort.charAt(0)))


--> Das finde ich genial! So kann man das tatsächlich super elegant lösen.
25.12.2011 07:50 sohar ist offline E-Mail an sohar senden Beiträge von sohar suchen Nehmen Sie sohar in Ihre Freundesliste auf
Geek Geek ist männlich
Gelegenheitsbesucher


Dabei seit: 10.02.2010
Beiträge: 27

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Alien Buster
split("[\\W]") teilt Wörter mit Umlauten aber nicht korrekt.


Huch stimmt ja.
Dann muss statt "[\\W]" folgendes in die Klammern "[^a-zA-ZÄÖÜäöüß0-9]"
25.12.2011 12:28 Geek ist offline E-Mail an Geek senden Beiträge von Geek suchen Nehmen Sie Geek in Ihre Freundesliste auf
l0tex
Erst kurz hier


images/avatars/avatar-2754.jpeg

Dabei seit: 15.09.2008
Beiträge: 430

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Bisschen kompliziert, denke ich. Gute Laune Dafür hat sich mal jemand Regexen ausgedacht.

Hab auch schon ewig kein Java mehr in den Fingern gehabt, aber ein Regex in der Form "\b([A-Z][a-z]+)\b" o.ä. sollte dir eine Collection liefern die du weiterverarbeiten kannst.
26.12.2011 12:36 l0tex ist offline E-Mail an l0tex senden Beiträge von l0tex suchen Nehmen Sie l0tex in Ihre Freundesliste auf
sohar
Übersetzer


images/avatars/avatar-2665.jpg

Dabei seit: 31.08.2007
Beiträge: 1.846
Herkunft: Weltraum
Erstmalige Anmeldung: 31.08.2007

Themenstarter Thema begonnen von sohar
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke alk, Regex ist natürlich noch cooler.

code:
1:
2:
import java.util.regex.*;


Dankeschön
26.12.2011 13:33 sohar ist offline E-Mail an sohar senden Beiträge von sohar suchen Nehmen Sie sohar in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
ALIEN.DE - Forum » Community Bereich » Computer, Internet und Spiele » JAVA-String hack

Impressum

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH