我正在尝试编写一些代码来检索字符串的前10个单词。
我能想象的最好的算法是按空格分割字符串并取前10个元素。但是,这不是很有效,因为字符串可能很长。
Java中是否有更好的算法可以实现这一目标?
非常感谢。
答案 0 :(得分:13)
您可以使用具有特定限制的String.split(String regex,int limit)
- 不要多次调用正则表达式规则11次。
它将创建一个String[]
对象,其中10个第一个元素是单独的单词,最后一个元素包含尚未检查规则的单词[因此它不会拆分字符串的其余部分]
答案 1 :(得分:6)
StringTokenizer st = new StringTokenizer("i am a very very long String");
for(int i = 0; i < 10 && st.hasMoreTokens(); i++) {
System.out.println(st.nextToken());
}
答案 2 :(得分:4)
您可以使用String.split()
指定限制。
来自API:
limit参数控制模式的应用次数,因此会影响结果数组的长度。如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含除最后一个匹配分隔符之外的所有输入。如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多次,数组可以具有任何长度,并且尾随空字符串将被丢弃。
答案 3 :(得分:3)
只需从左向右扫描:
static String[] first10Words(String s) {
List<String> l = new ArrayList<String>();
int pos = 0;
while (l.size() < 10) {
int newPos = s.indexOf(' ', pos);
if (newPos == -1) {
l.add(s.substring(pos));
break;
}
l.add(s.substring(pos, newPos));
pos = newPos + 1;
}
return l.toArray(new String[0]);
}
答案 4 :(得分:3)
使用Regex?
public String getFirst10Words(String arg) {
Pattern pattern = Pattern.compile("([\\S]+\\s*){1,10}");
Matcher matcher = pattern.matcher(arg);
matcher.find();
return matcher.group();
}
答案 5 :(得分:-1)
我是java的新手,但我已经做了一个更基本的人:
public void getSummary () {
int count=0;
int position=0;
for ( count = 0 ; count < 10 ; count++ )
{
position = yourString.indexOf(" ", position+1);
}
System.out.println(yourString.substring(0,position)+"...");
}