2017-05-04 149 views
-2

大家所以我正在編寫一個代碼,應該採用「aabbcc」並輸出「abc」,以便使用遞歸來刪除重複的字符。希望你能幫助我。Java中的字符串索引超出範圍錯誤(字符串索引超出範圍異常)

import java.util.*; 

public class StringReverser 
{ 
public static String getReverser(String i) 
{ 
    if (i==(" ")) 
     return ""; 
    if (i.charAt(0)==i.charAt(1)) 
     return i.substring(1) + getReverser(i.substring(2)); 
    else 
    return getReverser(i.substring(1)); 
} 

public static void main (String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a String"); 
    String in = sc.nextLine(); 
    System.out.println(getReverser(in)); 
} 
} 

當我跑我的代碼我得到這個錯誤:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:646) at StringReverser.getReverser(StringReverser.java:9) at StringReverser.getReverser(StringReverser.java:12) at StringReverser.getReverser(StringReverser.java:10) at StringReverser.main(StringReverser.java:20)

+2

好吧,如果你打什麼'如果(i.charAt(0)== i.charAt(1))'和字符串只有一個字符長? –

+0

@ T.J.Crowder還是一樣的錯誤 – Massoud

+0

@MaxZoom,那究竟是什麼意思? – Massoud

回答

0

也許使用分裂?這更容易使用。

0

這是一個工作解決方案。你近了!

如果只有一個字符,您希望繼續返回該單詞(否則會出現超出範圍的異常)。

如果相鄰的字符相同,則返回一個只保留最右側字符的新字(跳過一個副本)。

public static String getReverser(String word) { 
    System.out.println(word); 
    if (word.length() == 1) { 
     return word; 
    } 
    if (word.charAt(0) == word.charAt(1)) { 
     return getReverser(word.substring(1)); 
    } else { 
     return word.substring(0, 1) + getReverser(word.substring(1)); 
    } 
} 

輸出:

Enter a String: 
aabbccccaa 
aabbccccaa 
abbccccaa 
bbccccaa 
bccccaa 
ccccaa 
cccaa 
ccaa 
caa 
aa 
a 
abca 
+0

非常感謝! – Massoud

0
public static void main(String[] args) { 

    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a String"); 

    StringBuilder builder = new StringBuilder(); 

    char[] charArray = sc.nextLine().toCharArray(); 
    for(char chr : charArray){ 
     if(builder.indexOf(String.valueOf(chr))==-1){ 
      builder.append(chr); 
     } 
    } 

    System.out.println(builder); 
} 
相關問題