情景
我在Java有一个程序,它随机输出如下文字:
1个蛋1只鸡2只鸭
2头牛,1只猪,1个鸡蛋和2只猫
1小时1只狗1只鸵鸟2头牛3只鸡
问题:
如何在字符串中的第一个和最后一个之间的所有数字出现之前立即添加逗号和空格? 也就是说,我该如何格式化这些字符串,使这些事例看起来如下所示:
1个鸡蛋,1只鸡和2只鸭
2头牛,1头猪,1个鸡蛋和2只猫
1辆拖拉机,1只狗,1只鸵鸟,2头牛和3只鸡
正如您将看到的,在每种情况下,I:
到目前为止我得到的是:
我已经让它成功地处理了下列情况:
1个对象:
1猫
2个对象:
2只猫
多个对象的变体:
3只猫和1只鸵鸟
和
1辆卡车和6个侏儒
我需要做的是:
我可以成功地遍历该字符串并计算其中的数字:
// count digits in string
int digitsInString = 0;
for (int i = 0, len = concatenatedValue.length(); i < len; i++) {
if (Character.isDigit(concatenatedValue.charAt(i))) {
digitsInString++;
}
}
// if it only has < 3 digits, no formatting is needed
if(digitsInString < 3) {
return concatenatedValue;
} else {
//I've got to figure out what goes here
}
有什么想法吗? 我现在只是通过将字符串拆分成一个char数组来编写它,但这似乎有点冗长和业余。 我想做一些效率更高的事情。
你可以这样做:
class Main {
public static void main(String[] args) {
String input = "1 hour1 dog1 ostrich 2 cows and 3 chickens";
String output = input.replaceAll("(?<=[a-z]) ?(?<! and )(\\d+)", ", $1");
System.out.println(output);
}
}
返回:
1 hour, 1 dog, 1 ostrich, 2 cows and 3 chickens
模式匹配:
(?<=[a-z])
-对a-z
范围内的单个字符进行积极查找。?
-匹配可选空格。(?<;!and)
-和
的负面查找。(
-打开第一个捕获组。
\d+
-至少匹配一个数字(在Java中双转义)。)
-关闭第一个捕获组。我们替换为:
,$1
-逗号和空格文字以及在第一捕获组中捕获的任何内容。查看在线演示