2011-10-07 68 views

回答

45

請看String.indexOfString.substring

請確保您檢查了indexOf的-1。

+0

簡短而親切。還要記住indexOf給出了子串的第一個索引。 –

10

或者您可以嘗試如何使用正則表達式像

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

+3

'c'的崩潰不在字符串中,因爲indexOf將返回-1 – TofuBeer

+0

@Umer Hayat如果文件名是'def.hij.klm'會怎麼樣?你的代碼如何工作呢? (你的代碼只適用於這個例子 - 你不妨寫一個返回'「abc」'的函數 - 它也可以工作) – Bohemian

+0

@Bohemian:我知道有邊界情況和檢查丟失。這是針對具體問題的具體答案,想法是通過一個例子給出總體思路:)。 –

2

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

這取代了從第一個點到最後以「」(即,它會清除它,讓你與你想要的)

這是一個測試:

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

輸出:

abc 
+5

我沒有失望,(並且我同意,當人們無故倒退時,它會很糟糕),但是你的解決方案相當昂貴,而且不是非常明顯。 – TofuBeer

+2

@TofuBeer你能證明它是如何的昂貴嗎? –

+1

@ Knickerless-Noggins我可以用它來描述它,如果你需要具體細節,我也可以這樣做......但不知道我怎麼能在評論中做到這一點(也許必須做另一個問題/答案)。它很昂貴,因爲它會創建一個全新的字符串以及所有替換字符。子串只是將視圖返回到字符串中。這種幫助? – TofuBeer

2

在java.lang.String中你得到的indexOf()的一些方法:返回你的茶第一指數R /串。 和lstIndexOf:返回字符串你/焦炭

的最後一個索引從Java文件:

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

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

65

你可以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]; 
+5

您的提議不正確,因爲java.lang.String.split需要使用正則表達式值作爲屬性,而不僅僅是字符串。全部「。」在您的示例中需要更改爲「\\」。然後它會工作:) –

+1

我喜歡正則表達式,但是每次都能讓我感到滿意。 –

37

如果你的項目已經使用commons-lang,StringUtils的用於此目的提供了一個很好的方法:

String filename = "abc.def.ghi"; 

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

看到的Javadoc [2.6][3.1]

60

接受的答案是正確的,但它並沒有告訴你如何使用它。這就是你如何一起使用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 not found. 
//So check and account for it. 

if (iend != -1) 
String subString= filename.substring(0 , iend); //this will give abc 
+1

這是無效的代碼,因爲您不能在無花括號的If語句的主體中放置變量聲明。 – Clashsoft

0

這裏是代碼,返回從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); 
} 
相關問題