从Java中的字符串中提取第一个单词的最佳方法是什么?

尝试编写一个简短的方法,以便我可以解析一个字符串并提取第一个单词。 我一直在寻找做到这一点的最佳方法。

我假设我会使用str.split(","),但是我想仅从字符串中获取第一个单词,并将其保存在一个变量中,并将其余标记放在另一个变量中。

有一个简洁的方法吗?

user476033 asked 2020-01-11T20:24:34Z
12个解决方案
92 votes

split方法的第二个参数是可选的,如果指定该参数,则仅将目标字符串分割substring次。

例如:

String mystring = "the quick brown fox";
String arr[] = mystring.split(" ", 2);

String firstWord = arr[0];   //the
String theRest = arr[1];     //quick brown fox

或者,您可以使用String的substring方法。

Johan Sjöberg answered 2020-01-11T20:24:51Z
43 votes

你应该这样做

String input = "hello world, this is a line of text";

int i = input.indexOf(' ');
String word = input.substring(0, i);
String rest = input.substring(i);

以上是完成此任务的最快方法。

adarshr answered 2020-01-11T20:25:16Z
35 votes

为了简化以上内容:

text.substring(0, text.indexOf(' ')); 

这是一个准备好的功能:

private String getFirstWord(String text) {

  int index = text.indexOf(' ');

  if (index > -1) { // Check if there is more than one word.

    return text.substring(0, index).trim(); // Extract first word.

  } else {

    return text; // Text is the first word itself.
  }
}
Zon answered 2020-01-11T20:25:40Z
12 votes

我曾经做过的最简单的事情是

str.contains(" ") ? str.split(" ")[0] : str

其中str是您的字符串或文字bla bla :)。 因此,如果

  1. str具有空值,它按原样返回。
  2. str有一个单词,它按原样返回。
  3. str是多个单词,它提取第一个单词并返回。

希望这会有所帮助。

Madan Sapkota answered 2020-01-11T20:26:22Z
6 votes

您可以使用split,限制为2。

    String s = "Hello World, I'm the rest.";
    String[] result = s.split(" ", 2);
    String first = result[0];
    String rest = result[1];
    System.out.println("First: " + first);
    System.out.println("Rest: " + rest);

    // prints =>
    // First: Hello
    // Rest: World, I'm the rest.
  • API文档为:split
miku answered 2020-01-11T20:26:46Z
3 votes
import org.apache.commons.lang3.StringUtils;

...
StringUtils.substringBefore("Grigory Kislin", " ")
GKislin answered 2020-01-11T20:27:01Z
2 votes

像这样:

final String str = "This is a long sentence";
final String[] arr = str.split(" ", 2);
System.out.println(Arrays.toString(arr));

arr[0]是第一个单词,arr[1]是其余单词

Sean Patrick Floyd answered 2020-01-11T20:27:25Z
2 votes

您可以使用扫描仪

[http://download.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html]

扫描仪也可以使用定界符   除了空格。 这个例子   从字符串中读取多个项目:

     1
     2
     red
     blue

打印以下输出:

     1
     2
     red
     blue
PDStat answered 2020-01-11T20:28:07Z
1 votes

您也可以使用[http://download.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html]

Lucas Zamboulis answered 2020-01-11T20:28:27Z
0 votes

我知道这个问题已经回答了,但是我有另一种解决方案(对于那些仍在寻找答案的人)可以放在一行上:它使用拆分功能,但只给您第一个实体。

String test = "123_456";
String value = test.split("_")[0];
System.out.println(value);

输出将显示:

123
Hughsie28 answered 2020-01-11T20:28:52Z
0 votes

这些答案似乎都无法定义OP可能用“单词”表示的含义。 正如其他人已经说过的那样,“单词边界”可能是逗号,并且当然不能指望是空格,甚至是“空白”(即制表符,换行符等)。

最简单的说,这个单词必须由任何Unicode字母和任何数字组成。 甚至这可能也不对:StringUtils如果包含数字或以数字开头,则可能不符合单词的条件。 此外,连字符或撇号在整个Unicode中大概有几个变体呢? 各种此类讨论以及许多其他讨论将不仅适用于英语,而且适用于所有其他语言,包括非人类语言,科学符号等。这是一个很大的话题。

但是可能是这样(NB用Groovy编写):

String givenString = "one two9 thr0ee four"
// String givenString = "oňňÜÐæne;:tŵo9===tĥr0eè? four!"
// String givenString = "mouse"
// String givenString = "&&^^^%"

String[] substrings = givenString.split( '[^\\p{L}^\\d]+' )

println "substrings |$substrings|"

println "first word |${substrings[0]}|"

对于第一个,第二个和第三个StringUtilss,这可以正常工作。 对于“ && ^^^%”,它表示第一个“单词”是长度为零的字符串,第二个为“ ^^^”。 实际上,前导零长度令牌是String.split的说法:“给定的String并非以令牌开头,而是定界符”。

regex StringUtils中的NB表示“任何Unicode字母”。 String.split的参数当然是定义“定界符模式”的参数,即一群分隔标记的字符。

NB2性能问题与这样的讨论无关紧要,并且几乎可以肯定在所有情况下都是如此。

NB3我的第一个调用端口是Apache Commons的StringUtils软件包。 他们可能会为此类事情提供最有效和最佳工程解决方案。 但是什么也没跳出来... [https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html] ...尽管可能会有一些使用隐瞒。

mike rodent answered 2020-01-11T20:29:41Z
-2 votes
String anotherPalindrome = "Niagara. O roar again!"; 
String roar = anotherPalindrome.substring(11, 15); 

您也可以像这样

surabhi kale answered 2020-01-11T20:30:01Z
translate from https://stackoverflow.com:/questions/5067942/what-is-the-best-way-to-extract-the-first-word-from-a-string-in-java