webForumDet fria alternativet

Sträng-sprängare

5 svar · 535 visningar · startad av SPiN

SPiNMedlem sedan mars 20007 896 inlägg
#1

Hej!

Jag försöker få till en explode-funktion, som splittar en sträng in till en array. Men det funkar ju inte... Får ett NullPointerException när jag försöker använda funktionen.

Idéer välkomnas varmt :)

private static String[] explode(String txt, char chr) {
	String[] returnArr = null;
	String returnStr = null;
	int input = 0;
	
	for(int cnt = 0; cnt < txt.length(); cnt++) {
		if(txt.charAt(cnt) == chr) {
			returnArr[input] = returnStr;
			returnStr = null;
			input++;
		}
		else
			returnStr = returnStr + txt.charAt(cnt);
	}
	
	if(returnArr != null)
		return returnArr;
	else {
		returnArr[0] = txt;
		return returnArr;
	}
}

Kanske finns enklare sätt än det jag försöker mig på?

------------------
SPiN, bjorne.w@telia.com

-- §e Grr... --

[Redigerat av SPiN den 14 apr 2001]

sgtpepperMedlem sedan apr. 20007 588 inlägg
#2

Kolla in StringTokenizer-klassen. Den splittar en sträng med valbart tecken, sen plockar du ut delsträngarna likt detta:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600"> StringTokenizer st = new StringTokenizer("denna sträng splittas vid mellanslag", " ");
while (st.hasMoreTokens()) {
println(st.nextToken());
}

------------------
"Med ett schysst järnrör slår man hela världen med häpnad" - Socker-Conny

SPiNMedlem sedan mars 20007 896 inlägg
#3

Okey, tack för tipset!

Men jag vill juh verkligen ha min egen funktion ;)

Du ser inget direkt fel i min kod?

------------------
SPiN, bjorne.w@telia.com

-- §e Grr... --

[Redigerat av SPiN den 15 apr 2001]

SPiNMedlem sedan mars 20007 896 inlägg
#4

Jag vill alltså ha en funktion som returnerar en array med olika index, alltså array[0], array[1], osv.

Tänkte att man kunde blanda in StringTokenizer i en funktion, och fick fram följande. Men men... Den funkar ju inte :(

public static String[] explode(String txt, String chr) {
	String[] returnArr;
	StringTokenizer expl;
	int chars = 0;
	int done = 0;
	
	for(int i = 0; i < txt.length(); i++)
		if(txt.charAt(i) == chr.charAt(0))
			chars++;
	
	returnArr = new String[chars++];
	
	expl = new StringTokenizer(txt, chr);
	while(expl.hasMoreTokens()) {
		returnArr[done] = expl.nextToken();
		done++;
	}
	
	return returnArr;
}

ArrayIndexOutOfBoundsException får jag när jag kör min fil, men ingenting vid kompileringen...
Det blir fel på raden returnArr[done] = expl.nextToken(); i loopen while(expl.hasMoreTokens())...

------------------
SPiN, bjorne.w@telia.com

-- §e Grr... --

[Redigerat av SPiN den 15 apr 2001]

spangoMedlem sedan juni 20008 205 inlägg
#5

Så här kan man göra:

public String[] explode(String str, char ch){
	StringTokenizer st = new StringTokenizer(str, ch+"");
	String[] result = new String[st.countTokens()];
	int i = 0;
	while(st.hasMoreTokens())
		result[i++] = st.nextToken();
	return result;
}

Härligt nerkortad och trixig ;)

------------------
Life feeds on life feeds on life feeds on life feeds on life...

SPiNMedlem sedan mars 20007 896 inlägg
#6

Härligt!

Tack tack :)

------------------
SPiN, bjorne.w@telia.com

-- §e Grr... --

[Redigerat av SPiN den 16 apr 2001]

133 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)