Ответ 1
посмотрите String.indexOf
и String.substring
.
Убедитесь, что вы проверили -1 для indexOf
.
У меня есть строка (которая в основном является именем файла после соглашения об именах) abc.def.ghi
Я хотел бы извлечь подстроку перед первой .
(то есть точкой)
В java doc api я не могу найти метод в String, который делает это.
Я что-то упускаю? Как это сделать?
посмотрите String.indexOf
и String.substring
.
Убедитесь, что вы проверили -1 для indexOf
.
Вы можете просто split строку..
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];
Принятый ответ правильный, но он не говорит вам, как его использовать. Так вы используете функции 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 not found.
//So check and account for it.
if (iend != -1)
String subString= filename.substring(0 , iend); //this will give abc
Если ваш проект уже использует commons-lang, StringUtils обеспечивают хороший метод для этой цели:
String filename = "abc.def.ghi";
String start = StringUtils.substringBefore(filename, "."); // returns "abc"
или вы можете попробовать что-то вроде
"abc.def.ghi".substring(0,"abc.def.ghi".indexOf(c)-1);
Как использовать регулярное выражение?
String firstWord = filename.replaceAll("\\..*","")
Это заменяет все от первой точки до конца на "" (т.е. оно очищает ее, оставляя вам то, что вы хотите)
Здесь тест:
System.out.println("abc.def.hij".replaceAll("\\..*", "");
Вывод:
abc
В java.lang.String вы получаете некоторые методы, такие как indexOf(): который возвращает вам первый индекс строки char/. и lstIndexOf: который возвращает вам последний индекс String/char
Из Java Doc:
public int indexOf(int ch)
public int indexOf(String str)
Возвращает индекс внутри этой строки первого вхождения указанного символа.