String.split()

Saban

Erfahrenes Mitglied
Hallo Zusammen,

Ich versuche einen String zu spliten und gehe dabei wie folgt vor
Java:
/* Das Datum, welches bleiben soll */
String datum = (name.substring(position - 6, position + 2)).trim();
		
String tausch [] = datum.split(".");

Das Datum wird aus einem anderen String ausgeschnitten und liegt im folgenden Format vor: xx.xx.xx

Wenn ich nun tausch mit einer Schleife ausgeben lassen will
Java:
for(int index = 0; index < tausch.length; index++){
			System.out.println(tausch[index]);
	}

passiert nichts

und wenn ich das Array mit dem Index anspreche
Java:
System.out.println(tausch[1]);

kommt ne Index.out.of.bound.Exception

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at DateienUmbenennen.Verarbeitung.Name(Verarbeitung.java:30)
at DateienUmbenennen.Main.main(Main.java:18)

Ich hoffe ihr könnt mir helfen... Ich glaub ich steh total auf der Leitung...

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Moin,

das ließe sich nur damit erklären, dass Dein String-Feld leer ist.
An welcher Stelle das passiert kann ich hier aber leider nicht sagen,
da ich den String "name" nicht kenne und dessen Aufbau.

Gruß,
Xan
 
Zuletzt bearbeitet:
Hi Xandro!

Also dazu kann ich nur sagen das ich mir den String 'datum' schon hab ausgeben lassen und der String passt! Trotzdem Danke für deinen Post.
Hat jemand vllt ne andere Idee?

MfG
Saban
 
Moin nochmal,

Ich entsinne mich grad, dass split ja auch mit Regex arbeitet.
Kannst Du mal testen ob bei Deiner split-Methode der delimiter "\." irgendwas bringt?

Gruß,
Xan
 
Hi!

wie meinst du des mit dem Delimeter "/"?

Java:
String tausch [] = datum.split(               );


MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Moin,

Hab's jetzt, Du musst den Punkt doppelt escapen: \\.

Also:
Code:
String tausch [] = datum.split("\\.");

Begründung:
In den Regex-Pattern wird der Punkt als Angabe für "jedes vorhandene Zeichen" benutzt.
Da Du aber den Punkt selbst als delimiter (engl. für Trennzeichen) nutzen willst,
muss dieser dafür doppelt escaped (Backslash) werden.

Gruß,
Xan
 
Zuletzt bearbeitet:
Hallo,

ich habe zu diesem Thema eine andere Frage: und zwar möchte ich auch einen String aufteilen, jedoch ohne dabei die "Splitwörter" zu verlieren. Das soll bedeuten, dass der Delimiter, den ich angebe, nicht gelöscht werden soll. Wenn ich beispielsweise die folgende Zeichenkette habe:

Code:
Sub MakroProzedur
...
...
...
End Sub

Sub NochEineProzedur
...
...
...
End Sub

und ich möchte jetzt mit folgendem Code die beiden Prozeduren als separaten String erhalten:

Code:
Pattern pattern = Pattern.compile("end sub", Pattern.CASE_INSENSITIVE);
String[] procedures = pattern.split(prozeduresCode);
for(String proc : procedures)
  System.out.println("*******" + moduleName + "**************\n\n" + proc + "\n\n");

werden die einzelnen String zwar ausgegeben, aber fehlt bei jeder der Delimiter "end sub" und das möchte ich gern vermeiden. Gibt es da einen Weg, diesen in dem String integriert zu lassen?

LG Hardie
 
Moin,

kannst Du die Zeichenkette denn beliebig verändern?
Wenn ja, dann würde ich eventuell ein Trennzeichen zwischen den einzelnen Subs vorschlagen.

Beispiel:
Code:
Sub Bla
...
...
End Sub
# // Trennzeichen
Sub
...
...
Oder Du musst das End Sub einfach "nachliefern", das ändert sich ja nicht, denke ich.

Gruß,
Xan
 
Hi Hardi82,

wie Xandro schon schrieb, kennst Du den Delimiter und könntest diesen nachträglich anfügen.
Oder Du schreibst Deine eigene Split Methode. Ersteres ist natürlich einfacher.

Java:
private String[] split(String reg, String in) {
       Pattern pattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
  	   Matcher matcher = pattern.matcher(in);
  	   List<String> list = new ArrayList<String>();
  	    
  	    while (matcher.find()) {
  	        list.add(matcher.group(0));   
  	    }
  	    
  	    return (String []) list.toArray (new String[list.size()]);
    }

Gruß
joschi
 
Zuletzt bearbeitet:
Danke erste einmal für eure Tipps. Gibt es da eventuell noch eine elegantere Lösung, wie ich den gesamten Block von "Sub" bis "End Sub" als String extrahieren kann? Kann man das vielleicht als Pattern dem Matcher übergeben, wo man dann den gesamten Block zurückgegeben bekommt? Hab zwar schon einige Anleitungen bezüglich Regexp gelesen, aber irgendwie komme ich nicht dahinter, wie ich mein Pattern aufbauen muss, um halt so einen Block zu erhalten. Wenn ich sowas versuche wie "sub.*end sub" dann sagt der Matcher bei groupCount, dass er keine gefunden hat. Habt ihr da vielleicht noch einen nützlichen Hinweis.

Gruß Hardie
 

Neue Beiträge

Zurück