Чтение и замена строк в Java - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь прочитать file.txt в java построчно, а затем, когда строка имеет значение «foo», я устанавливаю строку после нее как «lineAfterFoo», а затем выводю ее пользователю.

Мой код Java ....

public void main(String[] args) throws IOException {

    try {
        FileReader someFile = new FileReader("file.txt");
        BufferedReader input = new BufferedReader(someFile);
        int i = 0;
        String[] line;
        line = new String[10];
        line[i] = input.readLine();

            while(line[i] != null) {

                line[i] = input.readLine();

                if (line[i] == "foo") {
                    i = i + 1;

                    line[i] = "lineAfterFoo";
                }

                i = i + 1;

            }

            for (int number = 1; number < i; number++) {
                System.out.println(line[number]);
            }

    } catch (FileNotFoundException e) {
        e.printStackTrace();

    }

}

File.txt

1
2
3
foo
HopeFullyThisWillChange
5
6
7
8
9
10

Ошибка ...

java.lang.NoSuchMethodError: main
Exception in thread "main" 

Спасибо за любую помощь!

Ответы [ 3 ]

7 голосов
/ 07 марта 2011

Метод main должен быть static:

public static void main(String[] args) throws IOException {
    // snip...  
}

Редактировать - на решение реальной проблемы

Цикл выполняется только один раз, потому что после первого прохода через тело while i будет равно 1. В этот момент line[1] является нулевым, потому что вы ничего не прочитали в него. Вот типичная идиома, используемая вместо этого ( обратите внимание на изменения в именах переменных ):

int i = 0;
String line = null;
String[] lines = new String[10];

// read the next line and immediately check to see if it's null
// also make sure that i doesn't go out of range
while ((line = input.readLine()) != null
    && i < lines.length) {
    lines[i] = line;

    // Use .equals() (not ==) when comparing strings!
    if ("foo".equals(line)) {
        i++; // shorter form of i=i+1
        lines[i] = "lineAfterFoo";
    }
    i++;
}
0 голосов
/ 07 марта 2011

Не нужно ли main быть static?

0 голосов
/ 07 марта 2011

Эта ошибка вообще не связана с вашим кодом, вы просто пытаетесь выполнить неправильный класс.Проверьте свою конфигурацию IDE и проверьте в командной строке с помощью java MyMainClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...