komische endlosschleife

Endymion

Bekanntes Mitglied
hi, ich habe ein problem bei folgender methode:
Java:
public void searchString()
	{
		int position = 0;
		String output = "";
		boolean replace;
		String mainString = enterString("Enter the String you want to search in!");
		String subString = enterString("Enter the String you want to search!");
		for (int i = 0; (position = mainString.indexOf(subString, position)) > -1; i++ )
		{
			position += subString.length();
			output += "[" + position + "-" + (position + subString.length()) + "]\n";
		}
		JOptionPane.showMessageDialog(f, output, "string searched", 1);
		replace = Utils.yesNo(f, "Do you want to replace the sub-String?", "replace?");
		if(replace)
		{
			position = 0;
			String replacement = enterString("Enter the String for the replacement!");
			for (int i = 0; (position = mainString.indexOf(subString, position)) > -1; i++)
			{
				mainString.replace(subString, replacement);
			}
			JOptionPane.showMessageDialog(f, mainString, "String with replaced subString", 1, null);
		}
	}
wenn ich den substring ersetzen will komme ich in eine endosschleife, wodurch das joptionpane nie angezeigt wird. lustigerweise habe ich aber die gleiche for-schleife schon etwas weiter oben in der methode, und die endet nicht in einer endlosschleife. kann mir jemand helfen?
 
Java:
	for (int i = 0; (position = mainString.indexOf(subString, position)) > -1; i++ )
Schon mal was von while-Schleifen gehört? ;-)

Die Endlosschleife betrifft wohl diesen Abschnitt:
[JAVA=19]for (int i = 0; (position = mainString.indexOf(subString, position)) > -1; i++)
{
mainString.replace(subString, replacement);
}[/code]
Empfehlung: API Doku lesen: String.replace(...)
Dann würde man feststellen, das zum einen die Schleife völlig überflüssig ist und der durch mainString referenzierte String durch bloses aufrufen der Methode nie verändert wird...
... und dadurch die Bedingung in der "Möchtegern" for-Schleife immer wahr ist.
 
Ich habe diese fragwürdeige for-Schleife durch ein
Java:
mainString.replaceAll(subString, replacement);
geändert. der mainString bleibt komischerweise unverändert.
 

Zurück
Oben