Как преобразовать строковые числа в целые числа, разделенные запятыми в java?

может ли кто-нибудь дать мне некоторые предопределенные методы или пользовательские методы для преобразования строковых чисел(пример: 123455) в целочисленное значение, разделенное запятыми (пример: 1,23,455).

6 ответов


предполагаю 123455 это String.

String s = 123455;
String s1 = s.substring( 0 , 1 );  // s1 = 1 
String s2 = s.substring( 1 , 3 );  // s2 = 23
String s3 = s.substring( 2 , 7 );  // s3 = 455
s1 = s1 + ',';
s2 = s2 + ',';
s = s1 + s2;   // s is a String equivalent to 1,23,455 

теперь мы используем static int parseInt(String str) метод преобразования строки в целое число.Этот метод возвращает целочисленный эквивалент числа, содержащегося в String указано str использование radix 10.

здесь вы не можете конвертировать s ---> int . Поскольку int не имеет запятых.Если вы попытаетесь преобразовать, вы получите следующее исключение java.ленг.NumberFormatException

вы должны использовать DecimalFormat класса. http://download.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html


int someNumber = 123456;
NumberFormat nf = NumberFormat.getInstance();
nf.format(someNumber);

используйте java.текст.NumberFormat, это решит вашу проблему.


наконец, я нашел точное решение для своих нужд.

import java.math.*;
import java.text.*;
import java.util.*;
public class Mortgage2 {
    public static void main(String[] args) {
        BigDecimal payment = new BigDecimal("1115.37");
        NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US); 
        double doublePayment = payment.doubleValue();
        String s = n.format(doublePayment);
        System.out.println(s);
    }
}

то, что вы ищете-это класс DecimalFormat (здесь), где вы можете легко установить разделитель и преобразовать строку в число с помощью метода parse() например.


результат, который вы ожидали, это " to запятая разделена целое значение", на мой взгляд, неверно. Однако, если вы просто ищете представительство выход, как насчет этих строк кодов, показанных ниже? (Обратите внимание, что вы не можете анализировать возвращаемое значение из valueToString в некоторый тип данных long, потому что это просто не имеет смысла :))

MaskFormatter format = new MaskFormatter("#,##,###");
format.setValueContainsLiteralCharacters(false);
System.out.println(format.valueToString(123455));