如何在java中遇到空格时拆分字符串的arraylist?
我在如何在java中遇到空格时拆分字符串的arraylist?,java,arraylist,split,Java,Arraylist,Split,我在数组列表中有这样一个输入: (应忽略空行,因为我将从文件中读取此输入) 我想把它转换成一个二维字符串数组,它的维数为[ArrayList中的元素数][3] 3号是固定的,即每个句子有3个单词。 像这样: "cat" "eats" "mouse" "mouse" "eats" "cheese" "cheese" "is" "tasty" 以下是我尝试过的: public static int processData(ArrayList<String> arra
数组列表中有这样一个输入:
(应忽略空行,因为我将从文件中读取此输入)
我想把它转换成一个二维字符串数组,它的维数为[ArrayList中的元素数][3]
3号是固定的,即每个句子有3个单词。
像这样:
"cat" "eats" "mouse"
"mouse" "eats" "cheese"
"cheese" "is" "tasty"
以下是我尝试过的:
public static int processData(ArrayList<String> array)
{
String str[]=new String[array.size()];
array.toArray(str);
String str1[][]=new String[str.length][5];
for(int i=0;i<str.length;i++)
{
str1[i][]=str.split("\\s+"); //i want to do something like this, but this is showing errors.
}
return 0; //this is temporary, I will be modifying it
}
publicstaticintprocessdata(arraylistarray)
{
String str[]=新字符串[array.size()];
数组。toArray(str);
字符串str1[][]=新字符串[str.length][5];
对于(inti=0;i您就接近了。在Java中,您不能使用空括号将新元素放在数组的末尾[]
。下面的代码就是这样做的。请注意,第二个数组中的元素数限制为5。因此,在前5个字之后,该行的其余部分将被忽略。如果该行较短,则数组末尾将出现null
s
public static int processData(ArrayList<String> array) {
String[] str = new String[array.size()];
array.toArray(str);
String[][] str1 = new String[str.length][3];
for(int i=0; i < str.length; i++) {
String[] parts = str[i].split("\\s+");
for(int j = 0; j < parts.length || j < 3; j++) {
str1[i][j] = parts[j];
}
}
// do something next
}
publicstaticintprocessdata(arraylistarray){
String[]str=新字符串[array.size()];
数组。toArray(str);
字符串[][]str1=新字符串[str.length][3];
对于(int i=0;i
更短、更高效的版本:
static int processData(ArrayList<String> array)
{
String str[][] = new String[array.size()][3];
for(int i = 0; i < str.length; ++i) {
str[i] = array.get(i).split("\\s+");
}
return 0;
}
静态int-processData(ArrayList数组)
{
字符串str[][]=新字符串[array.size()][3];
对于(int i=0;i
代码中第一个名为str的数组没有理由,因为您无法直接从ArrayList访问字符串
另外,您不必复制字符串,只需将字符串数组放入数组数组中,就像在我的代码中一样
另外,如果固定大小为3,并且不需要再向数组中添加任何内容,为什么要为5个字符串分配空间?将for循环更改为:
String str1[][] = new String[str.length][3];
for(int i = 0; i < str.length; i++) {
str1[i] = str[i].split("\\s+");
}
String str1[][]=新字符串[str.length][3];
对于(int i=0;i
你不需要有5个元素,如果你知道你只有3个单词,不要浪费你的资源
str
是String[]
,str[i]
是String
,str[i].split()
是String[]
也是str1[i]
。类型匹配
另外,这样代码更清晰、更容易理解。如果您不需要,我同意Ongy删除str
,但我现在说不出来,因为您说稍后将更改此方法(至少返回值)
奖金:顺便说一句,名称数组
,str
,str1
不是这段代码的最佳选择,很容易混淆什么是什么。试着找到更好的名称,例如行
,行
,单词
,或者类似的东西,就像你提到的“arraylist”主题:
try{
BufferedReader br = new BufferedReader(new FileReader("filename"));
Arraylist<String[]> l = new ArrayList<String[]>();
String line;
while((line = br.readline) != null)
l.add(line.split("\\s+");
br.close();
}catch(Exception e){e.printStackTrace();}
试试看{
BufferedReader br=新的BufferedReader(新文件读取器(“文件名”);
Arraylist l=新的Arraylist();
弦线;
while((line=br.readline)!=null)
l、 添加(行分割(\\s+);
br.close();
}catch(异常e){e.printStackTrace();}
我不知道为什么,但是str.split()显示错误:无法对数组类型String[]调用split(String)
另外,更好的做法是将数组声明为String[]str
,而不是String str[]
。是的,我会这样做。。但是如何删除该错误/为什么是5?为什么要用循环复制字符串,而不是从split()分配引用?我这样做:String parts[]=str[I]。split(\\s+))
谢谢你的帮助!除非你不需要一维str
数组,否则这可能会更好。我从新手的代码开始,同时给出答案,说明必须进行哪些必要的更改。我理解你所做的,正如我所说的,我认为你的答案是正确的,我只是想指出,有一种方法可以做到这一点效率要高一点,因为@Newbie似乎是新来的,可能已经这样做了,因为他不知道get()
function谢谢,我将尝试使用此..+1来提供帮助我实际上需要5个元素,但为了简单起见,我在这里提到了3个元素,以便以更短的方式显示输入和所需的输出..我已经在arraylist中读取了主函数中的文件内容..我正在将其传递给此函数确定..我将这样做...)
try{
BufferedReader br = new BufferedReader(new FileReader("filename"));
Arraylist<String[]> l = new ArrayList<String[]>();
String line;
while((line = br.readline) != null)
l.add(line.split("\\s+");
br.close();
}catch(Exception e){e.printStackTrace();}