我编写了以下代码来从Java字符串中获取下一个单词。我觉得它很原始,我不必为此写太多代码,但找不到其他方法。想知道是否有更好的方法可以做到这一点:
public static String getNextWord(String str, String word) {
String nextWord = null;
// to remove multi spaces with single space
str = str.trim().replaceAll(" +", " ");
int totalLength = str.length();
int wordStartIndex = str.indexOf(word);
if (wordStartIndex != -1) {
int startPos = wordStartIndex + word.length() + 1;
if (startPos < totalLength) {
int nextSpaceIndex = str.substring(startPos).indexOf(" ");
int endPos = 0;
if (nextSpaceIndex == -1) {
// we've reached end of string, no more space left
endPos = totalLength;
} else {
endPos = startPos + nextSpaceIndex;
}
nextWord = str.substring(startPos, endPos);
}
}
return nextWord;
}
注意:输入的单词可以是任何单词(多个单词,单个单词,非字符串形式的单词等)。
测试:
String text = "I am very happy with life";
System.out.println(StringUtil.getNextWord(text, "I"));
System.out.println(StringUtil.getNextWord(text, "I am"));
System.out.println(StringUtil.getNextWord(text, "life"));
System.out.println(StringUtil.getNextWord(text, "with"));
System.out.println(StringUtil.getNextWord(text, "fdasfasf"));
System.out.println(StringUtil.getNextWord(text, text));
输出:
am
very
null
life
null
null
答案 0 :(得分:2)
这听起来像是正则表达式的工作。像这样:
public static String getNextWord(String str, String word){
Pattern p = Pattern.compile(word+"\\W+(\\w+)");
Matcher m = p.matcher(str);
return m.find()? m.group(1):null;
}
答案 1 :(得分:1)
我认为,此解决方案可以正常工作:
public static String getNextWord(String str, String word) {
String[] strArr = str.split(word);
if(strArr.length > 1) {
strArr = strArr[1].trim().split(" ");
return strArr[0];
}
return null;
}
答案 2 :(得分:0)
您可以执行以下操作来创建单词数组:
String[] words = str.split(" ");
当用空格分隔时,这会将字符串拆分为多个字符串。请注意,您仍然需要根据需要修剪str。 现在,您可以通过查找某个单词并将索引加1来获得下一个单词,从而以某种方式在数组中进行搜索。
nextword = words[words.indexOf(word) + 1];
答案 3 :(得分:0)
希望这就是您要寻找的东西:
public static void main(String[] args) {
String text = "I am very happy with life";
System.out.println(getNextWord(text,"am"));
System.out.println(getNextWord(text,"with"));
System.out.println(getNextWord(text,"happy"));
System.out.println(getNextWord(text,"I"));
System.out.println(getNextWord(text,"life"));
}
public static String getNextWord(String text,String finditsNext){
String result = "There is no next string";
try {
int findIndex = text.indexOf(finditsNext);
String tep = text.substring(findIndex);
if(tep.indexOf(" ") >0) {
tep = tep.substring(tep.indexOf(" ") + 1);
if(tep.indexOf(" ") >0)
result = tep.substring(0, tep.indexOf(" "));
else
result = tep;
}
}catch (IndexOutOfBoundsException ex){
}
return result;
}
上面的输出是:
very
life
with
am
There is no next string
答案 4 :(得分:0)
希望这会达到您的目的。
public static String getNextWord(String str, String word) {
String[] words = str.split(" "), data = word.split(" ");
int index = Arrays.asList(words).indexOf((data.length > 1) ? data[data.length - 1] : data[0]);
return (index == -1) ? "Not Found" : ((index + 1) == words.length) ? "End" : words[index + 1];
}
输入(单个单词):
String str = "Auto generated method stub";
String word = "method";
输出:
next word: stub
输入(多字):
String str = "Auto generated method stub";
String word = "Auto generated";
输出:
next word: method
输入(缺少单词):
String str = "Auto generated method stub";
String word = "was";
输出:
next word: Not Found
输入(结束词):
String str = "Auto generated method stub";
String word = "stub";
输出:
next word: End
答案 5 :(得分:0)
您可以尝试以下代码。
public static String getNextWord(String str, String word) {
try {
List<String> text = Arrays.asList(str.split(" "));
List<String> list = Arrays.asList(word.split(" "));
int index_of = text.indexOf(list.get(list.size() - 1));
return (index_of == -1) ? null : text.get(index_of + 1);
} catch(Exception e) {
return null;
}
}