Вопрос, который я пытаюсь решить, требует, чтобы я прочитал в текстовом файле и разделил все слова в файле на разные объекты «Token», хранящиеся в ArrayList, без пробелов и переносов. Текущий код:
String[] tokenArray = line.split("\\s+");
удаляет все пробелы из строки, но я не могу удалить новые строки / возвраты.
Я попытался запустить обе эти строки в отдельности перед строкой. Метод split () для удаления новых строк, и они не работают.
line = line.replaceAll("\\r|\\n", "");
line = line.replaceAll("\\R+", "");
Вот весь метод.
public void tokenizeFile(String filePath) throws IOException
{
String line = "";
FileReader file = new FileReader(filePath);
BufferedReader read = new BufferedReader(file);
tokens.clear();
keywords = 0;
while((line = read.readLine()) != null)
{
String[] tokenArray = line.split("\\s+");
for(int i = 0; i < tokenArray.length; i++)
{
Token newToken = new Token(tokenArray[i]);
this.tokens.add(newToken);
keywords++;
}
}
read.close();
}
примечание: ключевые слова - это совершенно неактуальный private int, который профессор хотел, чтобы его метод увеличивался для каждого объекта, добавляемого в ArrayList
Содержимое ArrayList копируется в массив типа Token obj: Token [] (требование профессора) и затем записывается в вывод. текстовый файл с каждым объектом Token, записанным на новую строку. Вот методы копирования и записи.
public Token[] getTokenizer()
{
Token[] tokenList = new Token[tokens.size()];
for(int i = 0; i < tokens.size(); i++)
{
tokenList[i] = tokens.get(i);
}
return tokenList;
}
public void writeTokens() throws IOException
{
PrintWriter writer = null;
try
{
Token[] list = getTokenizer();
writer = new PrintWriter("output.txt");
for(int i = 0; i < keywords; i++)
{
writer.println(list[i]);
}
writer.close();
}
catch (IOException e)
{
System.err.println("Caught IOException: " + e + e.getMessage());
} finally{
if (writer != null)
{
writer.close();
}
}
}
Это содержимое файла, переданного в метод:
The cat in the hat
one fish two fish red fish blue fish
Это содержимое выходного файла (что writeTokens ( ) пишет):
The
cat
in
the
hat
one
fish
two
fish
red
fish
blue
fish
Для полного ознакомления:
Token. java
public class Token
{
private String token;
public String getValue()
{
return token;
}
public void setValue(String token)
{
this.token = token;
}
public Token()
{
}
public Token(String s)
{
this.token = s;
}
@Override
public String toString()
{
return String.format(token);
}
}
Tokenizer. java
public class Token
{
private String token;
public String getValue()
{
return token;
}
public void setValue(String token)
{
this.token = token;
}
public Token()
{
}
public Token(String s)
{
this.token = s;
}
@Override
public String toString()
{
return String.format(token);
}
}
Драйвер. java
public class Driver
{
public static void main(String[] args)
{
try
{
Tokenizer tokenizer = new Tokenizer();
tokenizer.tokenizeFile("input.txt");
tokenizer.writeTokens();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
РЕДАКТИРОВАТЬ: обновления в ответ на комментарии.
с использованием:
String[] tokenArray = line.split("\\R");
вывод:
The cat in the hat
one fish two fish red fish blue fish
используя:
String[] tokenArray = line.split("(\\W+)");
выход:
cat
in
the
hat
one
fish
two
fish
red
fish
blue
fish
Моя IDE против кода, и я компилирую с помощью встроенного терминала.
bash-3.2$ javac Driver.java
bash-3.2$ java Driver
bash-3.2$ cat output.txt