在字符串中放置逗号
Putting commas int the String
今天,我对逗号有疑问。我想像这样将逗号放在字符串中:
String before = "12345678901234";
String after = commaInString(before); //This is the function that I want to make, but with no luck yet.
System.out.println(after); // This should show 12,345,678,901,234
所以,我现在要做的是制作 commaInString(String string) 函数,我在下面制作了一个测试函数:
public static String commaInString(String string) {
int stringSize = string.length();
int fsize = stringSize % 3;
StringBuffer sb = new StringBuffer();
int j = 0;
for(int k=0;k<stringSize;k++) {
if(fsize !=0 && k<fsize) j=0;
else if(fsize !=0 && k==fsize) sb.append(",");
j++;
sb.append(string.substring(k,k+1));
if(j%3==0 && (j+fsize)!=stringSize) sb.append(",");
}
string=sb.toString();
return string;
}
但是,它只对部分数字有效,我不知道为什么。我不能使用 DecimalFormmat,因为数字太大而不能成为整数。我想把逗号放在 'String' 本身。我可以对上面的功能做些什么来解决这个问题?请帮忙
你非常接近只是编辑这个:
if(fsize !=0 && k<fsize) j=0;
else if(fsize !=0 && k==fsize){
j=0;
sb.append(",");
}
一个简单的方法是使用 BigInteger
和任何现有的格式化程序,例如
BigInteger num = new BigInteger("12345678901234567890");
String formatted = String.format("%,d", num);
// 12,345,678,901,234,567,890
我觉得下面的功能可以满足你的需求
public static String commaInString(String s) {
StringBuilder reverse = new StringBuilder(s).reverse();
StringBuilder output = new StringBuilder();
for (int i = 0; i < s.length(); i += 3)
output.append(reverse.substring(i, Integer.min(i + 3, s.length()))).append(",");
return output.reverse().deleteCharAt(0).toString();
}
您可以改用 StringBuilder::insert 来简化您的代码
public class Main {
public static void main(String[] args) {
// Test
int x = 1234567890;
for (int i = 1; i <= 10; i++) {
System.out.println(commaInString(String.valueOf(x)));
x /= 10;
}
}
public static String commaInString(String string) {
StringBuilder sb = new StringBuilder(string);
for (int k = 3; k < string.length(); k += 3) {
sb.insert(string.length() - k, ',');
}
return sb.toString();
}
}
输出:
1,234,567,890
123,456,789
12,345,678
1,234,567
123,456
12,345
1,234
123
12
1
如有任何问题,请随时发表评论 doubt/issue。
今天,我对逗号有疑问。我想像这样将逗号放在字符串中:
String before = "12345678901234";
String after = commaInString(before); //This is the function that I want to make, but with no luck yet.
System.out.println(after); // This should show 12,345,678,901,234
所以,我现在要做的是制作 commaInString(String string) 函数,我在下面制作了一个测试函数:
public static String commaInString(String string) {
int stringSize = string.length();
int fsize = stringSize % 3;
StringBuffer sb = new StringBuffer();
int j = 0;
for(int k=0;k<stringSize;k++) {
if(fsize !=0 && k<fsize) j=0;
else if(fsize !=0 && k==fsize) sb.append(",");
j++;
sb.append(string.substring(k,k+1));
if(j%3==0 && (j+fsize)!=stringSize) sb.append(",");
}
string=sb.toString();
return string;
}
但是,它只对部分数字有效,我不知道为什么。我不能使用 DecimalFormmat,因为数字太大而不能成为整数。我想把逗号放在 'String' 本身。我可以对上面的功能做些什么来解决这个问题?请帮忙
你非常接近只是编辑这个:
if(fsize !=0 && k<fsize) j=0;
else if(fsize !=0 && k==fsize){
j=0;
sb.append(",");
}
一个简单的方法是使用 BigInteger
和任何现有的格式化程序,例如
BigInteger num = new BigInteger("12345678901234567890");
String formatted = String.format("%,d", num);
// 12,345,678,901,234,567,890
我觉得下面的功能可以满足你的需求
public static String commaInString(String s) {
StringBuilder reverse = new StringBuilder(s).reverse();
StringBuilder output = new StringBuilder();
for (int i = 0; i < s.length(); i += 3)
output.append(reverse.substring(i, Integer.min(i + 3, s.length()))).append(",");
return output.reverse().deleteCharAt(0).toString();
}
您可以改用 StringBuilder::insert 来简化您的代码
public class Main {
public static void main(String[] args) {
// Test
int x = 1234567890;
for (int i = 1; i <= 10; i++) {
System.out.println(commaInString(String.valueOf(x)));
x /= 10;
}
}
public static String commaInString(String string) {
StringBuilder sb = new StringBuilder(string);
for (int k = 3; k < string.length(); k += 3) {
sb.insert(string.length() - k, ',');
}
return sb.toString();
}
}
输出:
1,234,567,890
123,456,789
12,345,678
1,234,567
123,456
12,345
1,234
123
12
1
如有任何问题,请随时发表评论 doubt/issue。