Как извлечь строку перед подчеркиванием в java? [Дубликат]

71
задан Bohemian 7 October 2011 в 06:57
поделиться

8 ответов

посмотрите на String.indexOf и String.substring.

Убедитесь, что вы выбрали -1 для indexOf.

50
ответ дан Anirudha 24 August 2018 в 01:21
поделиться

Как насчет использования регулярного выражения?

String firstWord = filename.replaceAll("\\..*","")

Это заменяет все от первой точки до конца на «" (т. е. очищает ее, оставляя вам то, что вы хотите)

Вот тест:

System.out.println("abc.def.hij".replaceAll("\\..*", "");

Выход:

abc
2
ответ дан Bohemian 24 August 2018 в 01:21
поделиться

Вы можете просто расколоть строку ..

public String[] split(String regex)

Обратите внимание, что java.lang.String.split использует значение регулярного выражения разделителя. В принципе, это ...

String filename = "abc.def.ghi";     // full file name
String[] parts = filename.split("\\."); // String array, each element is text between dots

String beforeFirstDot = parts[0];    // Text before the first dot

Конечно, это разбито на несколько строк для clairity. Он может быть записан как

String beforeFirstDot = filename.split("\\.")[0];
69
ответ дан Chad Schouggins 24 August 2018 в 01:21
поделиться

Вот код, который возвращает подстроку из String до любого из заданного списка символов:

/**
 * Return a substring of the given original string until the first appearance
 * of any of the given characters.
 * <p>
 * e.g. Original "ab&cd-ef&gh"
 * 1. Separators {'&', '-'}
 * Result: "ab"
 * 2. Separators {'~', '-'}
 * Result: "ab&cd"
 * 3. Separators {'~', '='}
 * Result: "ab&cd-ef&gh"
 *
 * @param original   the original string
 * @param characters the separators until the substring to be considered
 * @return the substring or the original string of no separator exists
 */
public static String substringFirstOf(String original, List<Character> characters) {
    return characters.stream()
            .map(original::indexOf)
            .filter(min -> min > 0)
            .reduce(Integer::min)
            .map(position -> original.substring(0, position))
            .orElse(original);
}
1
ответ дан m3th0dman 24 August 2018 в 01:21
поделиться

Если ваш проект уже использует commons-lang , StringUtils обеспечивают хороший метод для этой цели:

String filename = "abc.def.ghi";

String start = StringUtils.substringBefore(filename, "."); // returns "abc"

см. javadoc [2.6] [д2] [3,1] [/ д2]

43
ответ дан Max Fichtelmann 24 August 2018 в 01:21
поделиться

Принимаемый ответ правильный, но он не говорит вам, как его использовать. Так вы используете функции indexOf и подстроки.

String filename = "abc.def.ghi";     // full file name
int iend = filename.indexOf("."); //this finds the first occurrence of "." 
//in string thus giving you the index of where it is in the string

// Now iend can be -1, if lets say the string had no "." at all in it i.e. no "." is found. 
//So check and account for it.

String subString;
if (iend != -1) 
{
    subString= filename.substring(0 , iend); //this will give abc
}
68
ответ дан Sam B 24 August 2018 в 01:21
поделиться

В java.lang.String вы получаете некоторые методы, такие как indexOf (): который возвращает вам первый индекс char / string. и lstIndexOf: который возвращает вам последний индекс String / char

From Java Doc:

  public int indexOf(int ch)
  public int indexOf(String str)

Возвращает индекс внутри этой строки первого вхождения указанного символа.

2
ответ дан Swagatika 24 August 2018 в 01:21
поделиться

или вы можете попробовать что-то вроде

"abc.def.ghi".substring(0,"abc.def.ghi".indexOf(c)-1);

10
ответ дан Umer Hayat 24 August 2018 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: