Problem z dzialaniem pod roznymi systemami

0

Witam, mam problem - moj kod pod windows (eclipse) kompiluje sie i dziala poprawnie, pod linux (javac my_file.java) kompiluje sie, ale daje ten blad (java my_file):

nahnah i nah
Exception in thread "main" java.lang.NullPointerException
at java.util.regex.Matcher.appendReplacement(Matcher.java:699)
at java.util.regex.Matcher.replaceAll(Matcher.java:813)
at java.lang.String.replaceAll(String.java:2189)
at TreeEval.main(TreeEval.java:71)

Kawalek kodu:

String array1[] = new String[1000];
for (int i=0; i<1000; i++)
{
	array1[i] = br.readLine();
} // br to BufferedReader(FileReader) - wczytuje kolejne linie pliku do array1

String moj_test1 = "blabla i bla";
String zamiennik = "nah";
String wynik_testowy = moj_test1.replaceAll("bla", zamiennik);
System.out.println(wynik_testowy); // dotad dziala, co widac na output

for (int i=0; i<1000; i+=5)
{
	newstring1 = finalExpr.replaceAll("(?:y0)", array1[i]); // linia 71
	newstring1 = newstring1.replaceAll("(?:y1)", array1[i+1]);
	newstring1 = newstring1.replaceAll("(?:y2)", array1[i+2]);
	newstring1 = newstring1.replaceAll("(?:y3)", array1[i+3]);
}
// finalExpr jest typu String, zawiera wyrazenie matematyczne, w nim miedzy innymi y0, y1, y2, y3
// chce zamienic substringi z finalExpr na te z array1

Jak napisalem, pod windows to dziala, podmienia ladnie. Pod linux nie.
Moze ktos ma pomysl czemu?

0

Sprawdź co masz w tablicy array1

for (int i=0; i<1000; i++)
{
        array1[i] = br.readLine();
}

Metoda readLine() zwraca null po osiągnięciu końca pliku. U Ciebie zapewne jest mniej niż 1000 wierszy.

0

A ja podpowiem czemu:

  • dla windowsa znak końca linii ma dwa znaki \r i \n
  • dla linuxa znak końca linii ma jeden znak \n
    W efekcie oba te systemy inaczej liczą "nowe linie" i readLine pod jednym i pod drugim systemem może co innego uznać za linię.
0

Chyba się mylisz. Fragment dokumentacji metody readLine():

Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.

Ja podejrzewam różnice w wielkości liter w nazwie pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1