webForumDet fria alternativet

Snyggare kod

Java

3 svar · 327 visningar · startad av AG

Medlem sedan mars 20001 266 inlägg
Frågan#1

Borde finnas nåt snyggare sätt at skriva ut all denna kod, som det ser ut nu ser det förjävligt ut, nästan:

String input = (String) result.elementAt(1);
Pattern p = Pattern.compile("<(.|\n)+?>");
Matcher m = p.matcher(input);
input = m.replaceAll(" ");

Pattern p3 = Pattern.compile("<(.|\n)+");
Matcher m3 = p3.matcher(input);
input = m3.replaceAll("");

Pattern p4 = Pattern.compile("(.|\n)>");
Matcher m4 = p4.matcher(input);
input = m4.replaceAll("");

Pattern p5 = Pattern.compile("\\+[0-9]{1,3}");
Matcher m5 = p5.matcher(input);
input = m5.replaceAll("");

Pattern p2 = Pattern.compile("  &nbsp;     ");
Matcher m2 = p2.matcher(input);
input = m2.replaceAll("\n");

Pattern p7 = Pattern.compile("     closing time  event  type  1  X  2     ");
Matcher m7 = p7.matcher(input);
input = m7.replaceAll("\n");

Skriva om det på nåt sätt?

Andreas

Medlem sedan apr. 20007 588 inlägg
#2

Du kan ju slå ihop de regexpar som skall ge samma utresultat för att få lite mindre kod, sen behöver du inte definera upp nya objekt för varje matchning, du kan använda ursprungsobjekten:

		String input = (String) result.elementAt(1);
		Pattern p = Pattern.compile("<(.|\n)+?>");
		Matcher m = p.matcher(input);
		input = m.replaceAll(" ");
		
		p = Pattern.compile("(<(.|\n)+)|((.|\n)>)|(\\+[0-9]{1,3})");
		m = p.matcher(input);
		input = m.replaceAll("");
		
		p = Pattern.compile("(        )|(     closing time  event  type  1  X  2     )");
		m = p.matcher(input);
		input = m.replaceAll("\n");
Medlem sedan juni 2000841 inlägg
#3

Har jag många rader som är någorlunda lika så tycker jag det är snyggare att lägga ut det i en egen metod och sen skicka in parametrar till den, typ så här:

String input = (String) result.elementAt(1);
input = foo(input, "<(.|\n)+?>", " ");
input = foo(input, "(<(.|\n)+)|((.|\n)> )|(\\+[0-9]{1,3})", "");
input = foo(input, "(        )|(     closing time  event  type  1  X  2     )", "\n");

private String foo(String pInput, String pPattern, String pReplace)
{
	/** kan lägga följande 3 rader på en rad, men sånt blir ofta lite för rörigt */
	Pattern p = Pattern.compile(pPattern);
	Matcher m = p.matcher(pInput);
	return m.replaceAll(pReplace);
}
Medlem sedan mars 20001 266 inlägg
#4

Smiter in och lägger ett inlägg direkt efter Kalle Anka.

Testade Sgtpeppers exempel under gårdagen, och märkte då att resultatet ej blir samma.

Pattern p2 = Pattern.compile("(&nbsp;) | (<(.|\n)+?>) | (<(.|\n)+ ) | ((.|\n)>)");
Matcher m2 = p2.matcher(input);
input = m2.replaceAll("");

' detta är ursprungliga
Pattern p10 = Pattern.compile("&nbsp;");
Matcher m10 = p10.matcher(input);
input = m10.replaceAll("");

Pattern p2 = Pattern.compile("<(.|\n)+?>");
Matcher m2 = p2.matcher(input);
input = m2.replaceAll("");

Pattern p3 = Pattern.compile("<(.|\n)+");
Matcher m3 = p3.matcher(input);
input = m3.replaceAll("");

Pattern p4 = Pattern.compile("(.|\n)>");
Matcher m4 = p4.matcher(input);
input = m4.replaceAll("");

Vad beror det på?

Andreas

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)