我想选择文本字符串的前N个单词。
我试过split()
和substring()
无济于事。
我想要的是选择下面祷告的前3个单词并将它们复制到另一个变量中。
例如,如果我有一个字符串:
String greeting = "Hello this is just an example"
我想进入变量Z前三个单词,以便
Z = "Hello this is"
答案 0 :(得分:1)
String myString = "Copying first N numbers of words to a string";
String [] arr = myString.split("\\s+");
//Splits words & assign to the arr[] ex : arr[0] -> Copying ,arr[1] -> first
int N=3; // NUMBER OF WORDS THAT YOU NEED
String nWords="";
// concatenating number of words that you required
for(int i=0; i<N ; i++){
nWords = nWords + " " + arr[i] ;
}
System.out.println(nWords);
注意:此处 .split()函数返回一个字符串数组,该字符串数组是通过将给定字符串围绕给定正则表达式的匹配来计算的
所以,如果我写代码如下
String myString =“1234M567M98723651”;
String [] arr = myString.split(“M”); //想法:如果'M'出现
然后答案将是:
1234和567存储在一个数组中。
这是通过将分割值存储到给定数组中来实现的。第一个拆分值存储到arr [0],第二个转到arr [1]。
代码的后半部分用于连接所需的分割字数
希望你能从中得到一个想法!!!
谢谢!
答案 1 :(得分:0)
您可以尝试以下方式:
String greeting = "Hello this is just an example";
int end = 0;
for (int i=0; i<3; i++) {
end = greeting.indexOf(' ', end) + 1;
}
String Z = greeting.substring(0, end - 1);
N.B。假设源字符串中至少有三个空格字符。任何更少,这段代码可能会失败。
答案 2 :(得分:0)
public String getFirstNStrings(String str, int n) {
String[] sArr = str.split(" ");
String firstStrs = "";
for(int i = 0; i < n; i++)
firstStrs += sArr[i] + " ";
return firstStrs.trim();
}
现在getFirstNStrings("Hello this is just an example", 3);
将输出:
你好,这是
答案 3 :(得分:0)
在实用程序类中添加它,例如Util.java
public static String getFirstNWords(String s, int n) {
if (s == null) return null;
String [] sArr = s.split("\\s+");
if (n >= sArr.length)
return s;
String firstN = "";
for (int i=0; i<n-1; i++) {
firstN += sArr[i] + " ";
}
firstN += sArr[n-1];
return firstN;
}
使用方法: Util.getFirstNWords(“这将为您提供前N个单词”,3); ----&GT; “这将给出”
答案 4 :(得分:0)
如果你使用Apache Commons Lang3,你可以把它缩短一点:
public String firstNWords(String input, int numOfWords) {
String[] tokens = input.split(" ");
tokens = ArrayUtils.subarray(tokens, 0, numOfWords);
return StringUtils.join(tokens, ' ');
}
答案 5 :(得分:0)
发布的大多数答案已经使用了正则表达式,如果我们必须处理大量字符串,这可能会成为开销。甚至 str.split(" ")
在内部使用正则表达式操作。戴夫的答案可能是最有效的,但它不能正确处理同时出现多个空格的字符串,除了假设常规空格是唯一的单词分隔符并且输入字符串有 3 个或更多单词(假设他已经指出)。如果在选项中使用 Apache Commons,那么我将使用以下代码,因为它不仅简洁而且避免在内部使用正则表达式,而且还处理了少于 3 个单词的输入字符串:
/* Splits by whitespace characters. All characters after the 3rd whitespace,
* if present in the input string, go into the 4th "word", which could really
* be a concanetation of multiple words. For the example in the question, the
* 4th "word" in the result array would be "just an example". Invoking the
* utility method with max-splits specified is slightly more efficient as it
* avoids the need to look for and split by space after the first 3 words have
* been extracted
*/
String[] words = StringUtils.split(greeting, null, 4);
String Z = StringUtils.join((String[]) ArrayUtils.subarray(words, 0, 3), ' ');