Відповіді:
Прийнята відповідь правильна, але вона не говорить вам, як її використовувати. Таким чином ви разом використовуєте функції indexOf та substring.
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
}
Ви можете просто розділити рядок ..
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
Звичайно, це розбито на кілька рядків для наочності. Це можна було б записати як
String beforeFirstDot = filename.split("\\.")[0];
Якщо у вашому проекті вже використовується 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);
def.hij.klm? Як би тоді працював ваш код? (Ваш код працює лише для цього прикладу - ви також можете написати функцію, яка повертається "abc"- вона буде працювати так само добре)
Як щодо використання регулярного вираження?
String firstWord = filename.replaceAll("\\..*","")
Це замінює все від першої точки до кінця на "" (тобто очищає його, залишаючи вам те, що ви хочете)
Ось тест:
System.out.println("abc.def.hij".replaceAll("\\..*", "");
Вихід:
abc
У java.lang.String ви отримуєте такі методи, як indexOf (): який повертає вам перший індекс char / string. та lstIndexOf: який повертає вам останній індекс String / char
Від Java Doc:
public int indexOf(int ch)
public int indexOf(String str)
Повертає індекс всередині цього рядка першого появи вказаного символу.
Ось код, який повертає підрядку від 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);
}
Це може допомогти:
public static String getCorporateID(String fileName) {
String corporateId = null;
try {
corporateId = fileName.substring(0, fileName.indexOf("_"));
// System.out.println(new Date() + ": " + "Corporate:
// "+corporateId);
return corporateId;
} catch (Exception e) {
corporateId = null;
e.printStackTrace();
}
return corporateId;
}