尝试编写一个简短的方法,以便我可以解析字符串并提取第一个单词。我一直在寻找最佳方法。
我假设我会使用str.split(",")
,但是我想从字符串中抓取第一个第一个单词,并将其保存在一个变量中,并将其余的标记放在另一个变量中。
这样做有简洁的方法吗?
答案 0 :(得分:90)
split
方法的第二个参数是可选的,如果指定,则仅将目标字符串拆分N
次。
例如:
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
方法。
答案 1 :(得分:42)
你应该这样做
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);
以上是执行此任务的最快方法。
答案 2 :(得分:31)
简化上述内容:
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); // Extract first word.
} else {
return text; // Text is the first word itself.
}
}
答案 3 :(得分:9)
我以前做的简单就是
str.contains(" ") ? str.split(" ")[0] : str
str
是你的字符串或文字bla bla :)。所以,如果
str
具有空值,并按原样返回。str
有一个单词,它会按原样返回。str
是多个单词,它会提取第一个单词并返回。希望这有用。
答案 4 :(得分:6)
您可以使用String.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.
split
答案 5 :(得分:3)
import org.apache.commons.lang3.StringUtils;
...
StringUtils.substringBefore("Grigory Kislin", " ")
答案 6 :(得分:2)
您可以使用扫描仪
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
扫描仪也可以使用分隔符 除了空白。这个例子 从字符串中读取几个项目:
String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close();
打印以下输出:
1 2 red blue
答案 7 :(得分:2)
答案 8 :(得分:0)
final String str = "This is a long sentence";
final String[] arr = str.split(" ", 2);
System.out.println(Arrays.toString(arr));
arr[0]
是第一个单词,arr[1]
是其余单词
答案 9 :(得分:0)
我知道这个问题已经得到了解答,但是我有另一个解决方案(对于那些仍在寻找答案的人)可以放在一行: 它使用拆分功能,但只为您提供第一个实体。
String test = "123_456";
String value = test.split("_")[0];
System.out.println(value);
输出将显示:
123
答案 10 :(得分:0)
这些答案似乎都没有定义OP可能用“单词”表示的含义。正如其他人已经说过的那样,“单词边界”可能是逗号,并且肯定不能指望是空格,甚至是“空白”(也就是制表符,换行符等)
最简单的说,这个单词必须由任何Unicode字母和任何数字组成。甚至这可能是不正确的:String
如果包含数字或以数字开头,则可能不符合单词的条件。此外,连字符或撇号在整个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]}|"
这对于第一,第二和第三givenString
来说都可以。对于“ && ^^^%”,它表示第一个“单词”是长度为零的字符串,第二个为“ ^^^”。实际上,前导零长度令牌是String.split
的一种说法:“给定的String并非以令牌开头,而是定界符”。
\p{L}
中的 NB表示“任何Unicode字母”。 String.split
的参数当然是定义“定界符模式”的参数...,即,用于分隔标记的一簇字符。
NB2性能问题与此类讨论无关紧要,而且几乎可以肯定在所有情况下都是如此。
NB3我最先拜访的是Apache Commons的StringUtils
软件包。他们可能会为此类事情提供最有效和最佳工程解决方案。但是什么也没有跳出来……https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html ...尽管可能有一些有用的东西潜伏在那里。
答案 11 :(得分:0)
针对那些正在寻找kotlin的人
var delimiter = " "
var mFullname = "Mahendra Rajdhami"
var greetingName = mFullname.substringBefore(delimiter)
答案 12 :(得分:0)
我找到的最简单的方法是:
void main()
String input = "hello world, this is a line of text";
print(input.split(" ").first);
}
输出:你好
答案 13 :(得分:-2)
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11, 15);
你也可以这样做