regex und indexof

melmager

Erfahrenes Mitglied
Erstmal zur Problembeschreibung:

Leider mag indexof keinen Regex (jedenfalls nach der Sun Beschreibung)

Ich müsste die Postion im String ermitteln wenn das Zeichen dort nicht mehr ein
Buchstabe oder Zahl ist - sprich gib mir die Postion von einem Komma im String
(als beispiel)
ich bin beim Suchen auf findSubStringMatch gestolpert nur aus der Beschreibung werde ich nicht
ganz schlau ob die Function mir weiterhilft
hat da einer ein Stück Beispielcode ?

indexof("![A-Z0-9]") währe so schön gewesen :-)

Andere Hinweise werden auch gerne genommen.
 
Zuletzt bearbeitet:
Moin!

Dann eben mal naiv...

Code:
/*
 * Created on 04.03.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Darimont
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class RegTest {

	public static void main(String[] args) {
		String abc = "abcdefgh,ijklomn:pqrstuvw";
		int slen = abc.length();
		for (int i =0; i < slen;i++){
			char c = abc.charAt(i);
			if(!(c >= 'A' && c<= 'Z') && !(c>='a' && c<='z') && !(c>='0' && c<='9'))
				System.out.println("Zeichen " + c + " an Position: " + i); 
		}
	}
}

Gruß Tom
 
erstmal danke ..

Mal was ganz anderes: wie weit verschachtelt ihr Javafunctionen ?

wert = quelle.substring(atmppos,quelle.indexOf(czeile.charAt(cpos),atmppos));

ist eine eben gemachte Zeile von mir
 
Hier mal eine Lösung mit regulärem Ausdruck:
Code:
String test = "test!test";
int index = test.split("[^a-zA-Z0-9]")[0].length();
Das würde deinem indexOf Beispiel entsprechen, da das erste String Element des Arrays aus der split Funktion in seiner Länge dem Index des gesuchten Zeichens im Gesamtstring entspricht.

Was das Verschachteln angeht: Wenn ich einmal dabei bin ein kompliziertes Konstrukt zu bauen, brech ich nicht mittendrin ab, weil ich denke, dass ich das auseinander friemeln müsste. Wenn's allerdings auch für andere lesbarer Quellcode sein soll, setz ich mich nach einer Zeit noch mal hin und tu was an der Übersichtlichkeit. Privat spar ich mir das aber meistens.

Kommt aber auch darauf an, wie gut sich so eine Verschachtelung beim einfachen durchlesen verstehen lässt. Oft genug machen auch Verschachtelungen mehr Sinn, als zig lokale Variablen. Oben hätte ich ja auch noch einen extra String für den regulären Ausdruck, ein String Array und noch mal einen String für das erste Array-Element anlegen können :-).

Peter
 
Hey die Idee mit split ist gut :-)

nur über was ich jetzt gestolpert bin:

blabla.split("[^\w]");

mault mein Jbuilder an mit dem Spruch "falsches Escape Zeichen"
spinnt der oder ist die Regex von Split eingeschränkt?

blabla.split("[^a-zA-Z0-9_]")

geht übrigends :-)
 
Jau, wenn du Unterstriche auch nicht gelten lassen willst, geht's natürlich auch mit [^\w] oder direkt \W. Kommt auf's gleiche raus.

Da der Java Compiler allerdings selber beim Kompilieren nach Escape-Zeichen in Strings sucht, musst du Escape Zeichen für reguläre Ausdrücke, die der Java Compiler nicht selber schon in das passende Zeichen übersetzen kann, mit Doppel-Backslash angeben:

blabla.split("\\W");

Peter
 
da habe ich micht etwas ungeschickt ausgedrückt -
Nicht der Compiler mault sondern schon der Editor.
Jbuilder macht schon bei der Eingabe ein Syntaxcheck
hilft bei der Eingabe ungemein aber ich denke das ist ein Bug vom Editor
das er das \w anmault ..
ich glaube ich werde das mal bei Borland loswerden.
 
Dass ein \w angemeckert wird ist ja auch korrekt, das macht z.B. auch Eclipse und ich denke jeder Editor, der die Syntax testet. Es muss ja auch \\w sein, um es kompilieren zu können. Warum also nicht ein ungültiges \w im String schon bei der Eingabe anmeckern? :)

Peter
 
hmmm

blabla.split("\n"); geht und funktioniert

blabla.split("\\w") auch kein mecker aber
blabla.split("\w") mault er an

da ist doch keinerlei Logic hintendran
entweder alles mit doppelslash oder alles mit einem aber doch nicht Mischbetrieb :-(
 
Hallo!

Eigentlich ist da doch sehr wohl Logik hinter ...

\ leitet eine Escape Sequenz ein ...
\\ Escaped die Escape Sequenz ...;-) damit kannst du dann z.Bsp. schreiben
System.out.println("Hallo \\n");
gibt aus -> Hallo \n;
System.out.println("Hallo \n");
Hallo
<-LEERZEILE->
...

Gruß Tom
 
Zurück