2012-03-15 109 views
3

所以我用這個網站很好,但我找不到答案... 我怎樣才能從一個較大的字符串操縱特定的字符/字符串。我試圖使用string.substring(pos,金額),但當我嘗試並在循環中使用它,我得到一個字符串索引錯誤。 例如,我怎麼能從[abcdefg]字符串中刪除[4]中的'e'或者只是大寫「cde」?對不起,我的問題缺乏正式的代碼,它主要是一個概念性的東西。謝謝。字符串操作java

感謝您的建議,我試圖回答這樣一個問題: 寫一個程序作爲輸入唯一的字母組成的字符串並顯示字符串 每三個字母大寫與第二個字母開始,和所有其他字母爲小寫-案件。

有了這個代碼:

public class Test { 
    public static void main(String[] arguments){ 
     Scanner fish = new Scanner(System.in);  
     String a = fish.nextLine(); 
     int len=a.length(); 
     for (int i = 1; i < len; i += 3){ 
      String z = a.substring(i, 1); 
      String q = a.substring(i + 1); 
      a = z.toUpperCase() + q; 
     } 
     System.out.println(a); 
    } 
} 
+0

它只是簡單的照顧。你必須考慮所有的可能性。 – 2012-03-15 02:32:59

+0

即使它是一個概念性的東西,如果你發佈你已經編碼的東西,即使它不能正常工作,它也會更容易。它可以幫助我們更清楚地瞭解您的問題,顯示您已經掌握了問題,並使大多數SO用戶更可能爲您寫出高質量的答案。 – 2012-03-15 02:34:39

+1

顯示你給你例外的代碼。 – Java42 2012-03-15 02:35:44

回答

0

有沒有簡單的方法做,你要尋找的,很遺憾。子串不是用來替換的。例如,某些語言允許您執行此操作:

str.substring(2,3).toUpperCase(); 

Java不能這樣工作。如果你正在尋找這樣的事情,你最好寫一個小函數庫,它需要字符串和座標,並手動完成工作。它不會被烘焙到String類中。看看所有已經燒入到String類中的東西!它不需要更多的功能,只有一小部分用戶會使用。

4

字符串本身是一個不可變的類,因此您不能對其進行修改。當你進行修改時,一個新的對象被返回......但是這並不總是操縱字符串的最佳方法(就性能而言),特別是當你有一個大的字符串時。

Java有一些其他的類,比如StringBuffer和StringBuilder,它公開了更多的字符串操作操作。以下是一個片段:

`public String manipulateStr(String sourceStr) { 
    StringBuffer sb = new StringBuffer(sourceStr); 
    sb.delete(5,7); // Delete characters between index 5-7 
    sb.insert(10, "<inserted str>"); // Insert a new String 
    return sb.toString(); 
}` 

希望以上幫助。

+0

如果您未使用多線程,請使用StringBuilder。 – UnKnown 2016-06-06 10:24:05

0

replaceAll()可能是一個不錯的選擇,在這裏,按照在Java API:

替換此字符串與給定替換給定的正則表達式匹配的每個子字符串。

這似乎做你想做的,因爲你可以這樣做:

str.replace('e', ''); // remove 'e' from the string, or 
str.replaceAll("cde", "CDE"); 

這個問題大多數人有replaceAll()的是,第一個參數是不是字面String,它是正則表達式被解釋並用作匹配的模式。

這只是一個簡單的例子,但使用replace()replaceAll()有效地做你想做的。當然,這絕不是最有效或最容易寫的。

0

如果你知道你想要什麼刪除,說的字母「e」,但你不知道它在哪裏字符串中,你可以使用

stringName.indexOf("e"); 

它將返回的索引的整stringName中第一次出現字符串「e」。然後你將不得不創建一個新的字符串,它接受原始字符串的子字符串。您必須根據從indexOf()返回的整數指定子字符串的開始和結束索引。

如果使用indexOf()查找長度超過一個字符的字符串,例如indexOf(「ef」),則還需要考慮此字符串的長度。

0

我怎麼能去掉「電子」,在[4]從字符串「ABCDEFG」

正如Ameya已經說過,如果你用String對象打交道,那麼你真的不能「刪除」 e,因爲字符串是固定的。你需要做的,而不是什麼是建立一個新的 String對象包含所有位,除了E:

String input = "abcdefg"; 
String output = input.substring(0, 4) + input.substring(5); 
//      "abcd"   +  "fg" 

或者只是利用「CDE」?

同樣,你可以前走位,新增的「CDE」的大寫,然後添加其他:

String output = input.substring(0, 2) + input.substring(2, 5).toUpperCase() 
       + input.substring(5); 
//   = "ab" + "CDE" + "fg" 

寫一個程序作爲輸入的只是一個字符串字母並顯示字符串,每個第三個字母大寫,以第二個字母開頭,所有其他字母小寫。

在這種情況下,您需要遍歷字符,因此最好使用StringBuilder而不是將字符串添加到一起(出於性能原因)。以下是每個字符逐個添加的示例,並且每隔一個字符將其轉換爲大寫:

StringBuilder sb = new StringBuilder(); 
for (int i=0; i<input.length(); i++) 
{ 
    char c = input.charAt(i); 
    if (i%3 == 1) { 
     c = Character.toUpperCase(c); // every third character upper case 
    } 
    else { 
     c = Character.toLowerCase(c); 
    } 
    sb.append(c); 
} 
String output = sb.toString(); // aBcdEfg