我正在尝试拆分号码,但不知道该怎么做。
我提到了这个链接。
https://stackoverflow.com/a/12297231/1395259
假设我有一个数字12345678
。
使用上面的链接,我将分成 3 个位置。所以输出变为123
456
78
.
但我想要它,12
345
678
并且我想把被分割成表格的字符串 12.345.678
。
有人可以帮我吗?
我正在尝试拆分号码,但不知道该怎么做。
我提到了这个链接。
https://stackoverflow.com/a/12297231/1395259
假设我有一个数字12345678
。
使用上面的链接,我将分成 3 个位置。所以输出变为123
456
78
.
但我想要它,12
345
678
并且我想把被分割成表格的字符串 12.345.678
。
有人可以帮我吗?
java.text 包提供了格式化数字的所有合理选项
DecimalFormat f = new DecimalFormat("#,###");
DecimalFormatSymbols fs = f.getDecimalFormatSymbols();
fs.setGroupingSeparator('.');
f.setDecimalFormatSymbols(fs);
String s = f.format(12345678);
System.out.println(s);
输出
12.345.678
直接使用 DecimalFormat 非常灵活,但通常我们可以使用更短的版本
String s = NumberFormat.getNumberInstance(Locale.GERMAN).format(12345678);
产生相同的字符串
12.345.678
不同的国家有不同的数字(和日期)格式规则。通常我们希望我们的程序国际化/本地化并使用默认语言环境版本
NumberFormat.getNumberInstance().format(number);
一种懒惰的方法是反转字符串,应用上述方法,然后再次反转它。
您可以使用StringBuffer 的 Reverse Function,如使用 Java 反转“Hello World”字符串的每个单词中所示
12345678
87654321
876 543 21
12 345 678
我当然假设您想按 3 分割,剩下 <3 位数字的组出现在开头而不是结尾,就像您链接的方法一样。
不太懒惰的方法是使用字符串长度来调整您链接的方法以从length%3
字符开始。
使用您链接中的解决方案,我将改写如下(已测试!):
public String[] splitStringEvery(String s, int interval) {
int arrayLength = (int) Math.ceil(((s.length() / (double)interval)));
String[] result = new String[arrayLength];
int j = s.length();
int lastIndex = result.length;
for (int i = lastIndex - 1; i > 0; i--) {
result[i] = s.substring(j - interval, j);
j -= interval;
} //Add the last bit
result[0] = s.substring(0, j);
return result;
}
这是一个拆分 int 值并返回指定格式的 String 的方法:
public static String split( int n ) {
String result = "", s = Integer.toString( n );
while ( s.length() > 3 ) {
result = s.substring( s.length() -3, s.length() ) + ((result.length() > 0)? "." + result : "" );
s = s.substring( 0, s.length() -3 );
}
return s + "." + result;
}
输入:
12345678
输出:
12.345.678
如果是字符串,请使用 StringBuilder 或 StringBuffer。这是代码:
public class SplitNumber {
public static void main(String[] args){
int number = 12345678;
String numberStrBefore = Integer.toString(number);
StringBuffer numberStrAfter = new StringBuffer();
numberStrAfter.append(numberStrBefore.charAt(0));
numberStrAfter.append(numberStrBefore.charAt(1));
numberStrAfter.append('.');
numberStrAfter.append(numberStrBefore.charAt(2));
numberStrAfter.append(numberStrBefore.charAt(3));
numberStrAfter.append(numberStrBefore.charAt(4));
numberStrAfter.append('.');
numberStrAfter.append(numberStrBefore.charAt(5));
numberStrAfter.append(numberStrBefore.charAt(6));
numberStrAfter.append(numberStrBefore.charAt(7));
System.out.println("Number Before: " + numberStrBefore);
System.out.println("Number After: " + numberStrAfter.toString());
}
}
这与方法相同:
public class SplitNumber {
public static void main(String[] args){
int number = 12345678;
int[] split = {2,3,3}; //How to split the number
String numberStrAfter = insertDots(number, split);
System.out.println("Number Before: " + number);
System.out.println("Number After: " + numberStrAfter);
}
public static String insertDots(int number, int[] split){
StringBuffer numberStrAfter = new StringBuffer();
String numberStr = Integer.toString(number);
int currentIndex = 0;
for(int i = 0; i < split.length; i++){
for(int j = 0; j < split[i]; j++){
numberStrAfter.append(numberStr.charAt(currentIndex));
currentIndex++;
}
numberStrAfter.append('.');
}
numberStrAfter.deleteCharAt(numberStrAfter.length()-1); //Removing last "."
return numberStrAfter.toString();
}
}
此版本使用该方法,允许您将任何数字拆分为您想要的任何格式,只需将“split”变量更改为您想要将字符串拆分为的格式。(例如:将 12345678 拆分为:1.1234.5.67.8 意味着“拆分”必须设置为 {1,4,1,2,1})。