2014-12-19 4 views
0

Я написал этот бит кода, чтобы поменять символы словом , но по какой-то причине его не меняя первый символ, любая помощь будет оценена.Как я могу поменять символы в строке

public class StringWorker{ 
    public static void main (String[]arg$){ 

     Scanner in = new Scanner(System.in); 
     System.out.println("enter a word: "); 
     String str = in.nextLine(); 

     char[] newCh = str.toLowerCase().toCharArray(); 
     int length= str.length()-1; 
     char temp; 

     for (int i=0; i<length; i++){ 

       temp = newCh[i];  
       newCh[i] = newCh[i++]; 
       newCh[i++] = temp; 


     } 
     String revamped = String.valueOf(newCh); 
     System.out.println(revamped); 
     System.exit(0); 
    } 
} 
+6

Вы слишком часто вызываете 'i ++'. – Tom

+0

вам нужно поменять местами два символа слова, верно? –

+1

Примечание по стилю: рассмотрите соглашение об именах классов Java, начинающееся с имени класса с символом верхнего регистра. Это означает замену stringWorker на StringWorker. – IdusOrtus

ответ

5

Изменение:

for (int i=0; i<length; i++){     
    temp = newCh[i];  
    newCh[i] = newCh[i++]; 
    newCh[i++] = temp; 

к:

for (int i=0; i<length - 1; i++){ 
    temp = newCh[i];  
    newCh[i] = newCh[i+1]; 
    newCh[i+1] = temp; 
} 

i++ является приращение i (как i = i + 1), так что к тому времени, вы получите через первую итерацию цикла, i является уже 2.

Дополнительно: Это th Первое, что выскользнуло на меня, но мне любопытно узнать ваше определение «своп». Это небольшое исправление просто приведет к тому, что первый символ будет перемещен полностью до конца, например. «swap» станет «waps».

+0

это не приведет к ошибке при достижении последнего символа. Я использовал «swap» довольно слабо – Ambassador

+0

Если бы только первый и последний символы нужно было поменять местами, не было бы лучшим решением по сравнению с циклом? 'new StringBuilder (str.substring (1)). append (str.charAt (0))'. – SubOptimal

+0

@Ambassador - Да, я внес поправки в это изменение. У меня было только несколько минут бесплатно, поэтому я забыл поместить это. – splrs

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