Ввод запятых в строке - PullRequest
0 голосов
/ 30 марта 2020

Сегодня у меня проблема с запятой. Я хочу поместить запятые в строку следующим образом:

String before = "12345678901234";
String after = commaInString(before); //This is the function that I want to make, but with no luck yet.
System.out.println(after); // This should show 12,345,678,901,234

Итак, теперь мне нужно сделать функцию commaInString (String string), и я сделал тестовую функцию ниже:

public static String commaInString(String string) {
        int stringSize = string.length(); 
        int fsize = stringSize % 3; 
        StringBuffer sb = new StringBuffer();
        int j = 0;
        for(int k=0;k<stringSize;k++) {
            if(fsize !=0 && k<fsize) j=0;
            else if(fsize !=0 && k==fsize) sb.append(",");
            j++;
            sb.append(string.substring(k,k+1)); 
            if(j%3==0 && (j+fsize)!=stringSize) sb.append(",");
        }

        string=sb.toString();
        return string;
    }

Но это работает только на некоторых числах, и я не знаю почему. Я не могу использовать DecimalFormmat, так как число слишком велико, чтобы быть целым числом. Я хочу поставить запятые в самой строке. Какие меры можно предпринять для выполнения вышеуказанной функции, чтобы решить эту проблему? Пожалуйста, помогите.

Ответы [ 4 ]

1 голос
/ 30 марта 2020

Простой способ - использовать BigInteger и любой из существующих форматеров, например,

BigInteger num = new BigInteger("12345678901234567890");
String formatted = String.format("%,d", num);
// 12,345,678,901,234,567,890
.
0 голосов
/ 30 марта 2020

Используйте StringBugger :: insert вместо этого, чтобы упростить ваш код

public class Main {
    public static void main(String[] args) {
        // Test
        int x = 1234567890;
        for (int i = 1; i <= 10; i++) {
            System.out.println(commaInString(String.valueOf(x)));
            x /= 10;
        }
    }

    public static String commaInString(String string) {
        StringBuilder sb = new StringBuilder(string);
        for (int k = 3; k < string.length(); k += 3) {
            sb.insert(string.length() - k, ',');
        }
        return sb.toString();
    }
}

Вывод:

1,234,567,890
123,456,789
12,345,678
1,234,567
123,456
12,345
1,234
123
12
1

Не стесняйтесь комментировать в случай каких-либо сомнений / проблем.

0 голосов
/ 30 марта 2020

Я думаю, что функция ниже будет соответствовать вашим желаниям

public static String commaInString(String s) {
        StringBuilder reverse = new StringBuilder(s).reverse();
        StringBuilder output = new StringBuilder();
        for (int i = 0; i < s.length(); i += 3)
            output.append(reverse.substring(i, Integer.min(i + 3, s.length()))).append(",");
        return output.reverse().deleteCharAt(0).toString();
    }
0 голосов
/ 30 марта 2020

Вы были очень близки, просто отредактируйте это:

    if(fsize !=0 && k<fsize) j=0;
    else if(fsize !=0 && k==fsize){
        j=0;
        sb.append(",");
    }
...