格式化单个字符串中的所有数字(java)

06odsfpq  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(268)

我一直在为我的apcsp课程尝试一个计算器应用程序,但在开发过程中遇到了一个障碍。我一直在尝试格式化字符串中的所有数字,以添加逗号,虽然这是证明是相当困难的。
下面是我试图实现的输入和输出示例:

Input: "1081+34-3954"
Output: "1,081+34-3,954"

我试过弄乱弦分裂,但这并没有真正起作用,因为它变得非常大和重复。
感谢您的帮助,谢谢!

7d7tgy0s

7d7tgy0s1#

您可以使用regex替换,通过搜索数字,然后解析和重新格式化它们。
在java 9+中,执行以下操作:

String input = "1081+34-3954";

DecimalFormat fmt = new DecimalFormat("#,##0", DecimalFormatSymbols.getInstance(Locale.US));
String result = Pattern.compile("\\d+{4,}").matcher(input)
                       .replaceAll(n -> fmt.format(Long.parseLong(n.group())));
System.out.println(result); // prints: 1,081+34-3,954

任何不是4+位数字的文本都保持不变。
在旧的java版本中,使用替换循环:

String input = "1081+34-3954";

DecimalFormat fmt = new DecimalFormat("#,##0", DecimalFormatSymbols.getInstance(Locale.US));
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile("\\d+{4,}").matcher(input);
while (m.find())
    m.appendReplacement(buf, fmt.format(Long.parseLong(m.group())));
String result = m.appendTail(buf).toString();
System.out.println(result); // prints: 1,081+34-3,954
pgpifvop

pgpifvop2#

你可以用正则表达式这样做。 (\\d+) -捕获整型的块1。 ([+-]|$) -为操作员或生产线末端捕获块2

String s = "1081+34-3954";

Pattern p = Pattern.compile("(\\d+)([/*+-]|$)");
Matcher m = p.matcher(s);

StringBuilder sb = new StringBuilder();

while (m.find()) {
    sb.append(String.format("%,d%s", Integer.valueOf(m.group(1)), m.group(2)));
}
String result = sb.toString();

System.out.println(result);

印刷品

1,081+34-3,954
``` `String.format()` 采用与相同的参数
System.out.printf() `%,d` 用逗号格式化整数作为分组分隔符 `%s` 用于字符串获取运算符。
然而,如果这只是一个例子,你的模式更复杂,你将不得不调整它。查看以下内容了解更多信息。
字符串生成器
图案
string.format格式
r1zk6ea1

r1zk6ea13#

您可以只使用简单的string和stringbuilder方法:

public class Test {
  public static String splitStr(String input) {
    StringBuilder str = new StringBuilder();
    boolean change = false;
    if (input.charAt(input.length() - 1) != '+' || input.charAt(input.length() - 1) != '-') {
      input = new StringBuilder(input).append('+').toString();
      change = true;
    }
    int lastIdx = 0;
    for(int i = 0; i < input.length(); i++){
      StringBuilder subStr = new StringBuilder();
      if (input.charAt(i) == '-' || input.charAt(i) == '+') {
       subStr.append(input.substring(lastIdx,i));
       for(int j = subStr.length() - 3; j >= 0; j-=3) {
        subStr.insert(j, ',');
       } 
       lastIdx = i + 1;
      str.append(subStr);
      str.append(input.charAt(i));
      }
    } 
    if (change) {
      str.delete(str.length() - 1, str.length());
    }
    return str.toString();
  }
  public static void main (String[] args) {
    String str = "1081+34-3954";
    String newStr = splitStr(str);
    System.out.println(newStr);
  }
}

相关问题