2016-07-27 2 views
1

У меня возникли проблемы с моим кодом. поскольку я запускаю программу, он отображает индекс массива из связанного исключения. Пожалуйста, укажите, какие ошибки в коде.Индекс массива из связанного исключения для замены пространства «% 20»

package replacespace; 

import java.util.Scanner; 



public class ReplaceSpace { 

    /*public int calLength(char par1[]){ 
     int count=0; 
     for(char c:par1){ 
      count++; 
     } 
     return(count); 
    }*/ 

    /** 
    * 
    * @param args 
    */ 
    public void replaceSpace(char str[], int length){ 
     char[] newArray= new char[length+1]; 
     newArray[length+1]='\0'; 
     int position=0; 
     for(int i=0;i<length;i++){ 
      if(str[i]==' '){ 
       length=length+2; 
       newArray[position]='%'; 
       newArray[position+1]='2'; 
       newArray[position+2]='0'; 
       position=position+3; 

      } 
      else{ 
       newArray[position]=str[i]; 
       position++; 
      } 
     } 
     String s=new String(newArray); 
      System.out.println(s); 
    } 

    public static void main(String[] args) { 
     ReplaceSpace rs= new ReplaceSpace(); 
     String s1,sCopy; 

     int length; 
     Scanner scan= new Scanner(System.in); 
     System.out.println("Please enter any string"); 
     s1=scan.nextLine(); 
     length=s1.length(); 
     char stringArr[]=new char[length]; 
     stringArr =s1.toCharArray(); 

     //length=rs.calLength(stringArr); 

     rs.replaceSpace(stringArr,stringArr.length); 
    } 

} 

Этот код заменяет пространство в строке «% 20».

+2

'string.replace (»», "% 20")'? –

+1

Этот код очень запутан. Не используйте имена, такие как array, и StringArr1, s1 и т. Д. Для ваших переменных. Дает имена вещей, которые говорят, что они. Видите ли, этот код просто написан таким сложным образом, что понимание его намерения ... похоже на важную задачу. Серьезно: сосредоточьтесь на написании кода, который легко читать. Вы знаете: когда ваш код легко читается, вам также будет намного легче найти ошибки в вашем коде. Как стартер, вы можете посмотреть в «CleanCode» Роберта Мартина. – GhostCat

+1

Почему удивительно, что вы получаете 'ArrayIndexOutOfBoundsException'? Вы увеличиваете значение целочисленной 'length', но это не увеличивает фактическую длину' stringArr1', а затем вы пытаетесь пройти до конца конца массива ('length = length + 2' и looping до 'j <= length', индексирование на' j + 3') – jonhopkins

ответ

2
for(int j=var1;j<=length;j++){ 
        stringArr1[j]= '%'; 
        stringArr1[j+1]='2'; 
        stringArr1[i+2]='0'; 
        stringArr1[j+3]=array[i+1]; 
       } 

Этот код работает до тех пор, пока j не будет равно длине. , вы не можете иметь индекс для этой итерации (или одного) ранее.

Измените ваш j<=length на j<=(length-3) (или аналогичный)

Но моя рекомендация: использовать строки replace или replaceAll метод

+1

Или использовать 'StringBuilder'. –

+1

Следует отметить, что 'length - 3' недостаточно. 'length' увеличивается на 2 перед каждым запуском этого цикла – jonhopkins

+0

@jonhopkins. Я просто проверил индексы как «будет дополнен». Я не был уверен, насколько они были увеличены, поэтому я установил (или аналогичный). – Stultuske

Смежные вопросы