基本上我需要做的只是将句子的前十个单词保存到数组中。我从我的代码中知道,如果它大于10,所有单词都将被保存,但我只循环遍历循环10次,所以它停止了。但是,如果句子少于10个单词,我需要用空字符串填充它。所以如果它有10个或更多单词,我可以让它工作。但是,如果少于10个单词,我就无法工作。有没有人知道如何使它工作?我必须有一个10的数组大小。
String[] tempString = new String[10];
tempString = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
for(int i = 0; i < tempString.length; i++)
{
System.out.println(tempString[i]);
}
编辑:
所以基本上如果我输入句子:&#34;一个二三四有五六七八九十,&#34;它会奏效。但是,如果我进入&#34;一,二,三&#34;它会给我一个ArrayOutofBoundsException。我需要填充的其他7个索引是一个空字符串。
答案 0 :(得分:2)
您可以使用以下内容:
for(int i = 0; i < 10; i++)
{
if (i < tempString.length)
System.out.println(tempString[i]);
else
System.out.println("");
}
由于您需要10次打印,因此您需要迭代10次。每次迭代都会检查您是否仍在分割的字符串数组中。如果不是只是根据需要用空的空间填充其余部分。
答案 1 :(得分:1)
喜欢这个
if(tempString.length<10)
tempString = Arrays.copyOf(tempString, 10);
答案 2 :(得分:1)
String[] tempString = new String[10];
tempString = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
以上两条线没有多大意义。第一行创建一个长度为10的新数组并将其分配给变量tempString
,但第二行说:让我们忘记这个数组,然后重新分配一个包含句子所有单词的新数组到tempString
变量。
所以你实际上需要两个变量:
String[] result = = new String[10];
String allWords = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
// now copy at most 10 elements from allWords to result:
for (int i = 0; i < result.length && i < allWords.length; i++) {
result[i] = allWords[i];
}
// and now initialize the rest of the array with empty strings
for (int i = allWords.length; i < result.length; i++) {
result[i] = "";
}
答案 3 :(得分:0)
有两种方法可以实现这一目标。
在调用代码中显示的for循环之前,将所有字符串初始化为“”(在for循环中..)。
循环后,如果长度小于10,则将剩余项目设置为“”
if(tempString.length&lt; 10);
int diff = 10 - tempString.length -1;
循环差异时间并每次添加“”..
抱歉格式化..
答案 4 :(得分:0)
String[] tempString = Arrays.copyOf(sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"), 10);