在java中如何从字符串中获取子字符串直到字符c?

时间:2011-10-07 05:41:47

标签: java

我有一个字符串(基本上是遵循命名约定的文件名)abc.def.ghi

我想在第一个.(即点)

之前提取子字符串

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

11 个答案:

答案 0 :(得分:82)

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

答案 1 :(得分:78)

您只需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];

答案 2 :(得分:57)

查看String.indexOfString.substring

确保为indexOf检查-1。

答案 3 :(得分:51)

如果您的项目已经使用commons-lang,StringUtils为此提供了一个很好的方法:

String filename = "abc.def.ghi";

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

请参阅javadoc [2.6] [3.1]

答案 4 :(得分:11)

或者您可以尝试类似

的内容

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

答案 5 :(得分:4)

如何使用正则表达式?

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

用“”替换从第一个点到结尾的所有内容(即清除它,留下你想要的东西)

这是一个测试:

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

输出:

abc

答案 6 :(得分:2)

在java.lang.String中,您可以获得一些方法,如indexOf():它返回char / string的第一个索引。 和lstIndexOf:返回String / char的最后一个索引

来自Java Doc:

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

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

答案 7 :(得分:2)

以下代码从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);
}

答案 8 :(得分:1)

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 =“定义” s3="ghi"

如果你有超过 3 个 String ,那么它看起来完全像 s2

答案 9 :(得分:0)

这可能会帮助:

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;
}

答案 10 :(得分:0)

  private String getTextBefore(final String wholeString, String before){
   final int indexOf = wholeString.indexOf(before); 
   if(indexOf != -1){
       return wholeString.substring(0, indexOf);
   }
   return wholeString;
}