我正在尝试从文件中读取字符串并将它们存储在 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.
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
一起去。
两件事突然出现...
首先,您"似乎"试图在从中读取内容的循环中创建一个数组。 我假设您想先读取整个文件...
其次,您没有在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
完整的一个如下。
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]);
}
}