我正在尝试从文件中读取字符串并将它们存储在StringBuffer中,然后以某种方式将其转换为字符串并将该字符串拆分为单词并以字母顺序显示它们。我可以在没有stringbuffer的情况下完成它,但我必须这样做。 这就是我到目前为止所做的:
public class TextProcessor {
public static void main(String[] args) throws IOException {
String input_filename = "input_filename.txt";
File file1 = new File(input_filename);
Scanner input = new Scanner(file1);
StringBuffer buffer = new StringBuffer("");
while (input.hasNext()){
String s = input.next();
buffer.append(s);
//this is where I need to convert the stringbuffer to
// a string and split the words to put them in alphabetized order
// this is what I did
String arr= s.toString().toLowerCase();
String [] words = arr.split(" ");// Nothing seems to work.
答案 0 :(得分:1)
buffer.toString()
应该这样做。
但请注意,StringBuffer
不会为您添加空格。所以当你split(" ")
它不起作用时。
修正:
buffer.append(s).append(" ");
然后:
String myString = buffer.toString();
String[] arr = myString.split(" ");
但是,当然,通过 MadProgrammer 的建议,并将你的字符串放在List
而不是StringBuffer
中,可以避免这种额外的逻辑。要按字母顺序排序,请致电Collections.sort(listOfStrings)
。
<小时/> 是的,更多信息!
StringBuffer
是线程安全的,但效率低于StringBuilder
。鉴于您目前的知识,我建议您选择StringBuilder
。
答案 1 :(得分:1)
弹出两件事......
首先,你“似乎”试图在你正在阅读内容的循环中创建一个数组。我假设你想先阅读整个文件......
其次,您没有在StringBuilder
中添加分隔符,这意味着您的分割将失败,因为它(可能)没有任何要拆分的内容。
while (input.hasNext()){
String s = input.next();
if (buffer.length() > 0) {
buffer.append(" ");
}
buffer.append(s);
}
String arr= s.toString().toLowerCase();
String [] words = arr.split(" ");// Nothing seems to work.
要进行排序,您应该查看Arrays.sort
。
就个人而言,我会使用某种类型的List
,但您似乎“必须”使用StringBuilder
答案 2 :(得分:0)
完整的一个在下面。
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class TextProcessor {
public static void main(String[] args) throws IOException
{
String input_filename = "/home/alp/workspace/text.txt";
String temp_string = null;
String[] words;
File file = new File(input_filename);
Scanner input = new Scanner(file);
StringBuffer buffer = new StringBuffer();
while (input.hasNext())
{
String s = input.next();
buffer.append(s).append(" ");
}
temp_string= buffer.toString();
words=temp_string.split(" ");
Arrays.sort(words);
for(int i=0; i<words.length; i++) System.out.println(words[i]);
}
}