2016-10-16 105 views
1

在java中,切換字符串中的字符並將其餘字符保留在其原始位置的最佳方法是什麼? 我的真正擔心是,如果有辦法處理此索引超出範圍外的錯誤,而不是以下內容: 假設您要在「stringExample」中將大寫字母E切換爲字母r。Java列表索引超出範圍

可以大塊進入 「ST」 + 「R」 + 「ing」 的+ 「E」 + 「xample」

這------------------ ---------->(0,I) - (I,I + 1) - (I + 1,K) - (K,K + 1)---(K + 1 )

然後切換 「R」 & 「E」: 「ST」 + 「E」 + 「ing」 的+ 「R」 + 「xample」

----------- ------------------>(0,I) - (K,K + 1) - (I + 1,K) - (I,I + 1 )---(k + 1)

唯一的問題是,如果k是最後一個索引,那麼你需要wri te if語句來捕捉這個異常。除了我之前提出的建議,是否有更好的方法來切換這些字母?

+0

「r」和「E」只是我選擇的隨機字母作爲示例,當第二個字母出現在第一個字母之前時,此方法用於切換任何字母。 = 0; i user6750519

回答

1

如果您只想替換字符串中的字符,則最好使用String.substring完全重建字符串。例如:

String swapLetters(String str, int firstIndex, int secondIndex) { 
    if (firstIndex < 0 || firstIndex >= str.length()) { 
     throw new IndexOutOfBoundsException("firstIndex '" + firstIndex + "' is out of bounds."); 
    } else if (secondIndex < 0 || secondIndex >= str.length()) { 
     throw new IndexOutOfBoundsException("secondIndex '" + secondIndex + "' is out of bounds."); 
    } else if (firstIndex >= secondIndex) { 
     throw new IndexOutOfBoundsException("firstIndex isn't before secondIndex"); 
    } 


    StringBuilder newString = new StringBuilder(str.substring(0, firstIndex)); 
    newString.append(str.charAt(secondIndex)).append(str.substring(firstIndex + 1, secondIndex)) 
      .append(str.charAt(firstIndex)).append(str.substring(secondIndex + 1)); 

    return newString.toString(); 
} 

在這裏,即使它是最後一個字母,子字符串也只是返回一個空字符串,它會沒事的。

System.out.println("stringExample becomes " + swapLetters("stringExample", 2, 12)); //--> stringExample becomes steingExamplr 
System.out.println("stringExample becomes " + swapLetters("stringExample", 2, 6)); //--> stringExample becomes stEingrxample 

如果你想只需更換給定的字母每個字母的第一個實例,你會使用indexOf('r')代替charAt(2),例如。