Читать следующее слово в java
У меня есть текстовый файл, имеющий следующий контент:
ac und
accipio annehmen
ad zu
adeo hinzugehen
...
Я прочитал текстовый файл и перебираю строки:
Scanner sc = new Scanner(new File("translate.txt"));
while(sc.hasNext()){
String line = sc.nextLine();
}
Каждая строка имеет два слова. Есть ли какой-либо метод в java для получения следующего слова или мне нужно разделить строку, чтобы получить слова?
Ответы
Ответ 1
Вам не обязательно разделять строку, потому что java.util.Scanner default delimiter - это пробел.
Вы можете просто создать новый объект Scanner в своем заявлении while.
Scanner sc2 = null;
try {
sc2 = new Scanner(new File("translate.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (sc2.hasNextLine()) {
Scanner s2 = new Scanner(sc2.nextLine());
while (s2.hasNext()) {
String s = s2.next();
System.out.println(s);
}
}
Ответ 2
Вы уже получили следующую строку в этой строке вашего кода:
String line = sc.nextLine();
Чтобы получить слова строки, я бы рекомендовал использовать:
String[] words = line.split(" ");
Ответ 3
Используя Scanner
s, вы создадите множество объектов для каждой строки. Вы создадите приличное количество мусора для GC с большими файлами. Кроме того, это почти в три раза медленнее, чем использование split().
С другой стороны, если вы разделяете пространство (line.split(" ")
), код будет терпеть неудачу, если вы попытаетесь прочитать файл с другим разделителем пробелов. Если split()
ожидает, что вы напишете регулярное выражение, и оно все равно будет соответствовать, используйте split("\\s")
вместо этого, что соответствует "бит" больше пробелов, чем просто пробельный символ.
P.S.: Извините, я не имею права комментировать уже предоставленные ответы.
Ответ 4
вам лучше читать строку, а затем делать раскол.
File file = new File("path/to/file");
String words[]; // I miss C
String line;
HashMap<String, String> hm = new HashMap<>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")))
{
while((line = br.readLine() != null)){
words = line.split("\\s");
if (hm.containsKey(words[0])){
System.out.println("Found duplicate ... handle logic");
}
hm.put(words[0],words[1]); //if index==0 is ur key
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}