2015-03-01 4 views
0

В моем приложении пользователь выберет несколько опций из 10 параметров. Количество выбранных параметров может варьироваться от 1 до 10. Теперь я пытаюсь отделить эти выбранные параметры, вставив запятую между номерами. Я получаю номера, как это:Как вставить символы внутри строки в Java

123456 
346 
12 
5 

Теперь я пытаюсь преобразовать их, как это:

1,2,3,4,5 
3,4,6 
1,2 
5(no comma) 

Для этого я пытаюсь StringBuffer, но я получаю неправильный вывод:

For 12 output is 1,2 
For 5 output is 5 
For 123 output is 1,,23 
For 123456 output is 1,,,,,23456 

Помогите найти ошибку в коде?

String str = jTextField1.getText(); 
StringBuffer sb = new StringBuffer(str); 
int x = 0;  
for (int i = 0; i < str.length() - 1; i++) {  
    sb.insert(++x, ","); 
} 
System.out.println(sb); 
+1

Я чувствую, как педагогически, это должно быть намекают, но что спрашивающие должен решить. Подумайте, что происходит, когда StringBuffer растет с этой запятой: что это означает об индексе всего после него? – BaseZen

+0

Нужно использовать 'StringBuffer'? Похоже, вы используете его локально внутри метода, поэтому «StringBuilder» может быть более подходящим для работы. – initramfs

+0

@BaseZen Спасибо за ваш комментарий, но я не могу понять, что вы хотите сказать? Пожалуйста, скажите мне в легко понятной версии. –

ответ

0

@ ответов работ SMA, но другое решение с использованием кода в качестве базы выглядит следующим образом:

Ваш StringBuffer растет, как вы вставляете запятые, что делает ваш x индекс синхронизирован с фактическим длина буфера, поэтому вам потребуется увеличить его в другой раз после вставки запятой.

class Test { 

    public static void main(String[] args) { 
    String str="123456"; 
    StringBuffer sb=new StringBuffer(str); 
    int x=0; 
    for (int i = 0;i < str.length()-1; i++) 
     { 
     sb.insert(++x, ","); 
     x += 1; 
     } 
     System.out.println(sb); 
    } 

} 
+0

Поскольку люди передали новичкам ответ, а не позволили ему найти его сам (ну, вот как работает этот сайт), я бросаю вызов @Vishal Deb, чтобы переписать цикл, пройдя * назад * через 'StringBuffer' и наблюдая, как изменения индексации. – BaseZen

+0

@Sanketh Katta Thank U Я понял, что я пропустил. –

0

На самом деле Что происходит, ваш х = 0 сначала, но потом вставить в «++ х» так он идет в «х-1». Но в следующей итерации вы снова делаете «++ x», и она хранит запятую в «x = 2», но она должна храниться в «x = 3» на самом деле, так как размер вашего массива увеличился.

Попробуйте это.

String str=jTextField1.getText(); 
StringBuffer sb=new StringBuffer(str); 
int x=-1;  
for (int i = 0;i < str.length()-1; i++) 
{  
x+=2 
sb.insert(x, ","); 
} 
System.out.println(sb); 
1

Вы можете использовать регулярное выражение для ее достижения с очень простым и быстрым кодом:

String num = "123456789"; 
    String regex = "(\\d)(?=(\\d{1})+$)"; 
    String commaSaperatedNums = num.replaceAll(regex, "$1,"); 
    System.out.println(commaSaperatedNums); 
Смежные вопросы