Ich habe zwei Zeilen, die als die gleichen sind, aber sie haben zwei verschiedene Ergebnisse!REGEX Fehler in Java
public static String data =
"Rome:Jan 81.2,Feb 63.2,Mar 70.3,Apr 55.7,May 53.0,Jun 36.4,Jul 17.5,Aug 27.5,Sep 60.9,Oct 117.7,Nov 111.0,Dec 97.9" +
"\n" +
"London:Jan 48.0,Feb 38.9,Mar 39.9,Apr 42.2,May 47.3,Jun 52.1,Jul 59.5,Aug 57.2,Sep 55.4,Oct 62.0,Nov 59.0,Dec 52.9" +
"\n";
public static void main(String[] args) {
System.out.println(mean("London", data));
}
public static double mean(String town, String strng) {
Matcher matched=checkExists(town + "(.*?)\n", data);
if (matched!=null)
return calAvr(matched.group(1)+",");
return -1;
}
private static Matcher checkExists(String regex, String source) {
Matcher matcher = Pattern.compile(regex).matcher(source);
if (matcher.find()) return matcher;
return null;
}
private static double calAvr(String splitData) {
double res = 0.0;
int count = 0;
//Matcher matcher = Pattern.compile("\\s(.*?),").matcher(splitData);
Matcher matcher=checkExists("\\s(.*?),", splitData);
while (matcher.find()) {
res += Double.parseDouble(matcher.group(1));
count++;
}
return res/count;
}
Diese beide Linie sind als das gleiche:
//Matcher matcher = Pattern.compile("\\s(.*?),").matcher(splitData);
Matcher matcher=checkExists("\\s(.*?),", splitData);
Als ich die erste es die ganze zweite numbers.In finden verwende ich es nur das Matcher-Objekt zurück und verwenden, aber es kann nicht Finde "48.0", was das erste Mal vorkommt! Ich habe das Matcher-Objekt in der mittleren Funktion verwendet und das funktioniert gut!
Wären Sie in der Lage, eine einzelne Java-Datei zu veröffentlichen, die beide Zeilen (die identisch sind) ausführt und die verschiedenen Ausgaben vergleicht? –
Sie erhalten jede Nummer in der ersten Zeile, da ich versuche, den Code '81.2' auszuführen, kommt nicht mit Ihrer Regex –