![](/img/trans.png)
[英]Java - Get substring from 2nd last occurrence of a character in string
[英]In java how to get substring from a string till a character c?
我有一個字符串(基本上是一個遵循命名約定的文件名) abc.def.ghi
我想在第一個之前提取 substring .
(即一個點)
在 java doc api 中,我似乎無法在 String 中找到執行此操作的方法。
我錯過了什么嗎? 怎么做?
接受的答案是正確的,但沒有告訴您如何使用它。 這是一起使用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];
看一下String.indexOf
和String.substring
。
確保為indexOf
檢查-1。
如果您的項目已經使用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
以下是從String
返回子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 void getStrings() {
String params = "abc.def.ghi";
String s1, s2, s3;
s1 = params.substring(0, params.indexOf("."));
params = params.substring(params.indexOf(".") + 1);
s2 = params.substring(0, params.indexOf("."));
params = params.substring(params.indexOf(".") + 1, params.length());
s3 = params;
}
解決方案
s1="abc" s2="def" s3="ghi"
如果你有超過3 個字符串,那么它看起來就像 s2
我試過這樣的事情,
String str = "abc.def.ghi";
String strBeforeFirstDot = str.substring(0, str.indexOf('.'));
// strBeforeFirstDot = "abc"
我嘗試以我的示例為例,在 email 中提取 @ 符號之前的所有字符以提取並提供用戶名。
在java.lang.String中,您將獲得一些類似於indexOf()的方法:該方法將返回第一個char / string索引。 和lstIndexOf:返回字符串/字符的最后一個索引
從Java Doc:
public int indexOf(int ch)
public int indexOf(String str)
返回指定字符首次出現在此字符串中的索引。
這可以幫助:
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;
}
private String getTextBefore(final String wholeString, String before){
final int indexOf = wholeString.indexOf(before);
if(indexOf != -1){
return wholeString.substring(0, indexOf);
}
return wholeString;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.