Каков наилучший способ извлечения первого слова из строки в Java?
Попытка написать короткий метод, чтобы я мог разобрать строку и извлечь первое слово. Я искал лучший способ сделать это.
Я предполагаю, что я использовал бы str.split(",")
, однако хотел бы получить только первое первое слово из строки и сохранить это в одной переменной и поместить остальные токены в другую переменную.
Есть ли сжатый способ сделать это?
Ответы
Ответ 1
Второй параметр метода 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
В качестве альтернативы вы можете использовать метод substring
String.
Ответ 2
Вы должны делать это
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);
Вышеупомянутый - самый быстрый способ выполнить эту задачу.
Ответ 3
Чтобы упростить вышесказанное:
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.
}
}
Ответ 4
Простой, который я использовал, это
str.contains(" ") ? str.split(" ")[0] : str
Где str
- ваша строка или текст bla bla:). Итак, , если
-
str
имеет пустое значение, которое оно возвращает, как оно есть.
-
str
имеет одно слово, оно возвращается как есть.
-
str
- несколько слов, он извлекает первое слово и возвращает.
Надеюсь, что это будет полезно.
Ответ 5
Вы можете использовать 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.
Ответ 6
import org.apache.commons.lang3.StringUtils;
...
StringUtils.substringBefore("Grigory Kislin", " ")
Ответ 7
вот так:
final String str = "This is a long sentence";
final String[] arr = str.split(" ", 2);
System.out.println(Arrays.toString(arr));
arr[0]
- первое слово, arr[1]
- это остальное
Ответ 8
Вы можете использовать сканер
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
Ответ 9
Вы также можете использовать http://download.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html
Ответ 10
Я знаю, что на этот вопрос уже был дан ответ, но у меня есть другое решение (для тех, кто все еще ищет ответы), которые могут вписываться в одну строку: он использует функциональность split, но дает только 1-ю сущность.
String test = "123_456";
String value = test.split("_")[0];
System.out.println(value);
На выходе будет показано:
123
Ответ 11
Ни один из этих ответов, по-видимому, не определяет, что ОП может означать "слово". Как уже говорили другие, "граница слова" может быть запятой и, конечно, не может считаться пробелом или даже "пробелом" (т.е. также символами табуляции, перевода строки и т.д.)
В самом простом я бы сказал, что слово должно состоять из любых букв Unicode и любых цифр. Даже это может быть неправильно: String
может не квалифицироваться как слово, если оно содержит цифры или начинается с цифры. Кроме того, как быть с дефисами или апострофами, которых, по-видимому, существует несколько вариантов во всем Unicode? Все виды дискуссий такого рода и многие другие будут применяться не только к английскому языку, но и ко всем остальным языкам, включая не человеческий язык, научные записи и т.д. Это большая тема.
Но начало может быть таким (примечание написано на 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
способ сказать, что "данная строка начинается не с токена, а с разделителя".
NB в регулярном выражении \p{L}
означает "любая буква Юникода". Параметр String.split
, разумеется, определяет "шаблон разделителя"... то есть группу символов, разделяющую токены.
NB2 Проблемы производительности не имеют отношения к обсуждению, подобному этому, и почти наверняка для всех контекстов.
NB3 Моим первым портом захода был пакет StringUtils
Apache Commons. Вероятно, у них будут самые эффективные и лучшие инженерные решения для такого рода вещей. Но ничего не выпрыгнуло... https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html... хотя там может что-то скрываться.
Ответ 12
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11, 15);
Вы также можете сделать это