在 java 中如何从一个字符串获得子字符串到字符 c?

我有一个字符串(基本上是变数命名原则后面的文件名)

我想提取子字符串之前的第一个 .(即一个点)

在 java doc api 中,我似乎找不到一个 String 方法来实现这一点。
我错过了什么吗,怎么做?

435620 次浏览

看看 String.indexOfString.substring

一定要检查 indexOf的 -1。

或者你可以试试

"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/String 的第一个索引。 和 lstIndexOf: 返回 String/char 的最后一个索引

来自 Java 文件:

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

返回此字符串中指定字符的 第一次出现的索引。

你可以只 分开字符串. 。

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"

参见 javadoc [2.6] [3.1]

被接受的答案是正确的,但是它并没有告诉你如何使用它。这就是如何同时使用 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
}

下面是从 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;
}
  private String getTextBefore(final String wholeString, String before){
final int indexOf = wholeString.indexOf(before);
if(indexOf != -1){
return wholeString.substring(0, indexOf);
}
return wholeString;
}
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"

在我的示例中,我尝试提取电子邮件中@sign 之前的所有 char,以提取并提供用户名。