Manujaya Premathilaka Ответов: 2

Как решить stringindexoutofboundsexception


У меня есть java-программа, которая читает файл журнала и отображает его в консоли. Перед отображением его следует удалить метку времени. Поэтому я реализовал следующую функцию,

public void readLogFile() {
		
		try {

			
			InputStream fis = new FileInputStream("C:\\Users\\manujayap.DIRECT\\eclipse-workspace-java\\LogRead\\src\\LogRead\\SocketLog.log");
			InputStreamReader isr = new InputStreamReader(fis);
			BufferedReader br = new BufferedReader(isr);
			String line;
			
			//loop through logFile
			while((line = br.readLine()) != null) {
				
				line.substring(3);
				//passing the new line
				addDetails(line);
			}

			br.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}



Здесь
addDetails(line);
это отдельная функция, которая вставляет строку в список массивов.

Когда я компилирую программу, она выдает исключение.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -3
	at java.base/java.lang.String.substring(String.java:1876)
	at LogRead.DataImpl.readLogFile(DataImpl.java:30)
	at LogRead.DataMain.main(DataMain.java:10)


Как я могу решить эту проблему? Спасибо!

Что я уже пробовал:

Я попытался дать начало и конечную точку подстроке

2 Ответов

Рейтинг:
17

phil.o

То substring метод не изменяет исходную строку; вместо этого он возвращает новую строку. Таким образом, линия

line.substring(3);
ничего не делает. Ты наверное хочешь писать
line = line.substring(3);
вместо этого, что позволяет сохранить новую строку обратно в исходную.

Но, похоже, проблема здесь в том, что 3 не является допустимым индексом в строке. Возможно, вы захотите проверить длину, прежде чем пытаться усечь:
if (line.length() > 3)
   { line = line.substring(3); }

Пример метода Java - String substring() [^]


Рейтинг:
1

OriginalGriff

На первый взгляд - а у нас нет ваших данных, поэтому мы не можем сказать, - сообщение об ошибке подразумевает, что строка не содержит 4 символов. Поскольку вы находитесь в цикле, это означает, что по крайней мере одна строка в вашем файле слишком коротка - и их может быть больше, но наиболее вероятными виновниками являются первая и последняя строки файла.

Поэтому используйте отладчик и посмотрите, что именно происходит. Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!