Каков наилучший способ извлечения первого слова из строки в 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

Ответ 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); 

Вы также можете сделать это