我正在尝试拆分数字,但不知道该怎么做。
我提到了这个链接。
https://stackoverflow.com/a/12297231/1395259
假设我有一个号码12345678
。
使用上面的链接我分为3个位置。因此输出变为 123
456
78
。
但我希望它为 12
345
678
我希望将 {{1}形式的字符串拆分} 。
有人可以帮帮我吗?
答案 0 :(得分:10)
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);
答案 1 :(得分:2)
一种懒惰的方法是反转字符串,应用上面的方法,然后再将其反转。
您可以使用StringBuffer's Reverse Function,如Reverse each individual word of "Hello World" string with Java
所示12345678
87654321
876 543 21
12 345 678
我当然假设您想要拆分3秒,并且剩下< 3位数的组会出现在开头而不是结尾,就像您链接的方法一样。
不那么懒惰的方法是使用字符串长度来调整你链接的方法以length%3
个字符开头。
答案 2 :(得分:0)
使用链接中的解决方案我会将其改为以下(TESTED!):
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;
}
答案 3 :(得分:0)
这是一个分割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
答案 4 :(得分:0)
如果是String,请使用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();
}
}
使用此方法,此版本允许您将任何数字拆分为任何所需的格式,只需将“拆分”变量更改为要将字符串拆分为的格式即可。 (例如:将12345678拆分为:1.1234.5.67.8意味着“拆分”必须设置为{1,4,1,2,1})。