我有一个没有空格的字符串,我想创建一个由单词的子串组成的数组。例如,让字符串为 stackoverflow 数组应该是:
[sta,cko,ver,flo,w]
我使用的代码如下,这确实只给我第一项。任何帮助将不胜感激。
public static ArrayList<String> getWords(String s){
ArrayList<String> words = new ArrayList<String>();
for(int i=0;i<s.length(); i=i+3){
words.add(s.substring(i, 3));
}
return words;
}
答案 0 :(得分:3)
您的代码存在两个问题。首先,&#34; 3&#34;在
s.substring(i, 3)
表示字符串开头的第3个索引,而不是i的第3个索引,所以你想要
s.substring(i, i + 3)
其次,如果字符串比i + 3短,那么你将得到一个例外。要解决此问题,您可以使用Math.min。它看起来像这样:
public static ArrayList<String> getWords(String s){
ArrayList<String> words = new ArrayList<String>();
for(int i=0;i<s.length(); i=i+3){
words.add(s.substring(i, Math.min(i + 3, i.length())));
}
return words;
}
答案 1 :(得分:1)
您需要传递i + 3
作为substring
调用的第二个参数(它需要开始和结束索引)。另外,我更喜欢编程到List
界面。您可以使用+=
代替i = i + 3
。如果else
中没有三个字母,则需要String
条款。像,
public static List<String> getWords(String s) {
List<String> words = new ArrayList<>();
for (int i = 0; i < s.length(); i += 3) {
if (i + 3 < s.length()) {
words.add(s.substring(i, i + 3));
} else {
words.add(s.substring(i));
}
}
return words;
}
然后,为了完整起见,我使用基本的main
方法(如
public static void main(String[] args) {
System.out.println(getWords("stackoverflow"));
}
哪些输出(根据要求)
[sta, cko, ver, flo, w]
答案 2 :(得分:1)
您走在正确的轨道上,但您的substring
应为(i, i+3)
,如下所示:
public static ArrayList<String> getWords(String s){
ArrayList<String> words = new ArrayList<String>();
for(int i=0;i<s.length(); i+=3){
if (i+3 >= s.length())
words.add(s.substring(i));
else
words.add(s.substring(i, i+3));
}
return words;
答案 3 :(得分:1)
您可以使用番石榴Splitter:
显着减轻它String f = "stackoverflow";
List<String> p = Splitter.fixedLength(3).splitToList(f);
System.out.println(p); // [sta, cko, ver, flo, w]