簡體   English   中英

在 java 中如何從字符串中得到 substring 直到字符 c?

[英]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.indexOfString.substring

確保為indexOf檢查-1。

如果您的項目已經使用commons-lang ,StringUtils為此提供了一個不錯的方法:

String filename = "abc.def.ghi";

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

參見javadoc [2.6] [3.1]

或者您可以嘗試類似

"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM