2017-08-20 10 views
0

なぜそれはエラーを投げるのですか?すべてのヘルプは特殊文字に影響を与えずに文字列を反転させる

public class RAWS 
{ 
public String rawsc(String ori) 
{ 
    String temp=""; 
    for(int i=0;i<ori.length();i++) 
    { 
     char c=ori.charAt(i); 
     if(((c>=65)&&(c<=90))||((c>=97)&&(c<122))) 
      temp=c+temp; 
    } 
    for(int i=0;i<ori.length();i++) 
    { 
     char c=ori.charAt(i); 
     if(((c>=65)&&(c<=90))||((c>=97)&&(c<122))) 
      ori.replace(c, temp.charAt(i)); 
    } 
    for(int i=0;i<ori.length();i++) 
    { 
     System.out.println(ori.charAt(i)); 
    } 
    return(ori); 
} 
public static void main(String[] args) 
{ 
    String str="a,b$c"; 
    RAWS ob=new RAWS(); 
    String new1=ob.rawsc(str); 
    for(int i=0;i<new1.length();i++) 
    { 
     System.out.print(new1.charAt(i)+" "); 
    } 
} 
} 

をいただければ幸いエディタ:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
at java.lang.String.charAt(String.java:658) 
at arraygs.RAWS.rawsc(RAWS.java:22) 
at arraygs.RAWS.main(RAWS.java:30) 
+2

どのようなエラー????? – Antoniossss

+0

どのような種類のエラーがスローされますか?スタックトレースを提供できますか? –

+1

編集内容をロールバックする:コードを**本文**のように画像としてではなく、質問本文に保存してください。 –

答えて

1

問題の一部は、文字列temporiの長さを持っていない可能性があり

for(int i=0;i<ori.length();i++){ 
    char c=ori.charAt(i); 
    if(((c>=65)&&(c<=90))||((c>=97)&&(c<122))) 
     ori.replace(c, temp.charAt(i)); 
} 

でコールtemp.charAt(i)です。この理由は

for(int i=0;i<ori.length();i++) { 
    char c=ori.charAt(i); 
    if(((c>=65)&&(c<=90))||((c>=97)&&(c<122))) 
     temp=c+temp; 
} 

だからjava.lang.StringIndexOutOfBoundsExceptionをもたらすことができる(第2のループの一部として)temp位置iにアクセスする場合条件最初のループです。

+0

ありがとうございます!あなたが言ったように、それは問題であり、今はエラーはありません。しかし、依然として欲望の成果はありません。論理的に何かが間違っているかもしれません。 – Swarnav

0
public class Solution { 
public static void main(String[] args) { 
System.out.println(reverseString("a,b$c")); 
} 
/** 
* Reverse string with maintaining special character in place 
* 
* Algorithm: 
* 1. create temporary array 
* 2. copy all character from original array excluding special character 
* 3. reverse the temporary array 
* 4. start copying temporary array into original if element is an alphabetic character 
* @param input 
* @return 
*/ 
public static String reverseString(String input) { 
char[] inputArr = input.toCharArray(); 
char[] tempArr = new char[input.length()]; 
int i=0; 
int j=0; 
for (char ch:inputArr){ 
    if(Character.isAlphabetic(ch)){ 
    tempArr[i] = ch; 
    i++; 
    } 
} 
i--; 
while(j<i){ 
    char temp = tempArr[i]; 
    tempArr[i]= tempArr[j]; 
    tempArr[j]=temp; 
    j++; 
    i--; 
} 
for(i=0,j=0;i<input.length();i++){ 
    if(Character.isAlphabetic(inputArr[i])){ 
    inputArr[i]= tempArr[j++]; 
    } 
} 
return new String(inputArr); 
} 
} 
関連する問題