【问题标题】:Method for adding commas to digit string in JavaJava中为数字字符串添加逗号的方法
【发布时间】:2017-01-03 23:25:54
【问题描述】:

任务是在从右到左看的每三个数字之后添加。所以数字 1000000 应该是 1,000,000 等等。

我对如何解决这个问题有比较好的想法,但我不知道为什么我没有输出。也许我犯了一些我不知道的错误或什么......

我认为我理解字符串是不可变的概念,因此它们不能就地更改,当您想将某些内容更改为字符串时,您必须创建新的字符串对象。但我不明白这怎么可能:

`result = ch + result;` 

还有这个

result = "," + result;

我在这里做错了什么?

   import acm.program.*;
   import acm.util.*;

    public class AddCommasToNumericString extends ConsoleProgram{

        public void run(){
            while(true){
                String digits = readLine("Enter a numeric string: ");
                if (digits.length() == 0) break;
                println(addCommasToNumericString(digits));
            }
        }

        public String addCommasToNumericString(String digits){
            String result = "";
            int counter = 0;
            for (int i = digits.length()-1; i <= 0 ; i--){
                char ch = digits.charAt(i);
                result = ch + result;
                counter++;
                if (counter % 3 == 0){
                    result = "," + result;
                }
            }
            return result;
        }
    }

【问题讨论】:

  • NumberFormat.getNumberInstance(Locale.US).format(digits) 将完成这项工作。
  • @bhantol 当然可以,但我怀疑他的任务是手动执行此操作以学习如何使用字符串。
  • 是的,这就是我问的原因,所以我不发布这个简单的解决方案。
  • 如果你还没有找到答案为什么你可以在字符串不可变时执行result = "," + result,这是因为所有变量都是对象的引用而不是对象他们自己。因此,当您说result = something... 时,您只是将变量result 设置为引用一个新字符串;你实际上并没有改变字符串本身。

标签: java string digits


【解决方案1】:

我建议去掉counter,只使用循环变量,只需稍加改动即可:

public String addCommasToNumericString(String digits) {
    String result = "";
    for (int i=1; i <= digits.length(); ++i) {
        char ch = digits.charAt(digits.length() - i);
        if (i % 3 == 1 && i > 1) {
            result = "," + result;
        }
        result = ch + result;
    }

    return result;
}

addCommasToNumericString("123");     // 123
addCommasToNumericString("12345");   // 12,345
addCommasToNumericString("1234567"); // 1,234,567

【讨论】:

  • 每次都是这样,我完成了一些作业,总是犯这些该死的打字错误!我 Tnx Tim。
【解决方案2】:

将读取的行转换为Integer,然后将其格式化为String

String digits = readLine("Enter a numeric string: ");
Integer myInt = new Integer(digits);
String output = NumberFormat.getNumberInstance(Locale.US).format(myInt.value());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    相关资源
    最近更新 更多