【问题标题】:Check if count contains , after every thousand在每千次之后检查 count 是否包含
【发布时间】:2016-12-15 10:25:39
【问题描述】:

我有一个字符串表示计数“1,125,854”。

我想检查每千位小数后是否存在“,”。

例如125,854 和 1,125,854

我写了以下代码

import java.text.DecimalFormat;
import java.text.Format;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

public class CountComma {
    public static void main(String[] args) {
        String str = "1,125,854";
        int count = 0;
        String revStr = new StringBuilder(str).reverse().toString();
        System.out.println("Reverse String: " + revStr);
        List<Integer> format = new ArrayList<Integer>();

        for (char ch : revStr.toCharArray()) {
            System.out.println(ch);
            if (ch == ',') {

                count = count + revStr.indexOf(ch);
                format.add(count);

            }

        }

        System.out.println("Count: " + count);

        System.out.println(format.toString());
    }
}

This code gives output :
Reverse String: 458,521,1
4
5
8
,
5
2
1
,
1
Count: 6
[3, 6]

有人可以建议更好的方法吗?

谢谢

【问题讨论】:

  • 你有什么问题?你的代码是在做你想做的事吗?
  • 更好的方法是编写一个根据输入是否有效返回布尔值 true/false 的方法。现在,你在检查什么?你在打印什么?
  • 为什么要这么做?是否想将字符串解析为 int 值?如果是这样,请参阅 - stackoverflow.com/questions/11973383/…
  • 感谢大家的建议。我的问题是:“检查数字字符串是否具有正确的逗号格式”它在应用正则表达式后解决。("\\d{1,3}(,\\d{3})*")

标签: java


【解决方案1】:

如果您只想检查数字字符串是否具有正确的逗号格式,那么您可以使用以下单行:

String str = "1,125,854";
boolean isCorrect = str.matches("\\d{1,3}(,\\d{3})*");

更新:

如果您想让正则表达式更加与语言环境无关,您可以首先根据当前语言环境获取千位的分组分隔符。例如,如果在 servlet 中执行此检查,您可以尝试以下操作:

Locale currentLocale = httpServletRequest.getLocale();
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(currentLocale);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
char separator = symbols.getGroupingSeparator();

然后

boolean isCorrect = str.matches("\\d{1,3}(" + separator + "\\d{3})*");

【讨论】:

  • 锚点不是必需的。
  • 我不知道字符串的来源以及 OP 将如何使用该字符串,但检查语言环境并使用正确的分组分隔符而不是逗号可能很有用跨度>
【解决方案2】:

您应该真正使用具有正确语言环境的 NumberFormat: https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html 或采用模式的 DecimalFormat 构造函数: https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html#DecimalFormat-java.lang.String-

当字符串与格式不匹配时,parse方法会抛出ParseException。

【讨论】:

    【解决方案3】:

    您可以为此使用 RegEx(此处的教程:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html)。

    (\d{1,3})(,(\d{3}))*
    

    (修正了我的回答,正如 Robin Koch 指出的那样)

    【讨论】:

    • 第二个量词必须是{3},否则会匹配1,2,34,5
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 2020-11-20
    • 1970-01-01
    • 2019-01-04
    • 2014-10-08
    • 2020-01-09
    • 2013-08-04
    • 2011-11-10
    相关资源
    最近更新 更多