Java 将stringbuffer转换为字符串并按字母顺序放置单词
我试图从文件中读取字符串并将其存储在StringBuffer中,然后以某种方式将其转换为字符串,并将该字符串拆分为单词,并按字母顺序显示它们。没有stringbuffer我也能做,但我必须这样做。 这就是我到目前为止所做的:Java 将stringbuffer转换为字符串并按字母顺序放置单词,java,stringbuilder,Java,Stringbuilder,我试图从文件中读取字符串并将其存储在StringBuffer中,然后以某种方式将其转换为字符串,并将该字符串拆分为单词,并按字母顺序显示它们。没有stringbuffer我也能做,但我必须这样做。 这就是我到目前为止所做的: public class TextProcessor { public static void main(String[] args) throws IOException { String input_filename =
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
不会为您添加空格。因此,当您拆分(“”)时,它将不起作用
修正:
然后:
但当然,通过采纳程序员的建议,将字符串放在列表中而不是StringBuffer
中,可以避免这种额外的逻辑。要按字母顺序排序,请调用集合。排序(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.
对于排序,您应该查看
就我个人而言,我会使用某种类型的列表
,但您似乎“必须”使用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]);
}
}
导入java.io.File;
导入java.io.IOException;
导入java.util.array;
导入java.util.Scanner;
公共类文本处理器{
公共静态void main(字符串[]args)引发IOException
{
字符串输入_filename=“/home/alp/workspace/text.txt”;
String temp_String=null;
字符串[]个单词;
文件文件=新文件(输入文件名);
扫描仪输入=新扫描仪(文件);
StringBuffer=新的StringBuffer();
while(input.hasNext())
{
字符串s=input.next();
缓冲区。追加。追加(“”);
}
temp_string=buffer.toString();
words=temp_string.split(“”);
数组。排序(单词);
对于(int i=0;我为什么“必须”使用StringBuilder
?将它们存储在列表中会更简单。对于本作业,我必须使用StringBuffer,那么至少有两个答案可以让您朝着正确的方向前进……在盲目实施之前,确保您知道建议它们的“原因”;)你为OP做作业真是太好了…但是当老师问他们为什么选择这样做时…他们能回答他们吗…?而且,你可能会在列表的末尾出现一个空白元素…看起来他做了我的作业,但我在代码中添加的唯一一件事是附加(“”)。谢谢大家的帮助。
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.
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]);
}
}