Answers:
int j = 123456;
String x = Integer.toString(j);
x = x.substring(0, 4) + "." + x.substring(4, x.length());
x = x.substring(0, x.length()-2) + "." + x.substring(x.length()-2);
如评论中所述,StringBuilder可能比使用StringBuffer更快。如Java文档中所述:
此类提供与StringBuffer兼容的API,但不保证同步。此类设计为在单线程正在使用字符串缓冲区的地方(通常是这种情况)来代替StringBuffer。在可能的情况下,建议优先使用此类而不是StringBuffer,因为在大多数实现中它会更快。
用法:
String str = Integer.toString(j);
str = new StringBuilder(str).insert(str.length()-2, ".").toString();
或者,如果您需要同步,请使用具有类似用法的StringBuffer:
String str = Integer.toString(j);
str = new StringBuffer(str).insert(str.length()-2, ".").toString();
java.lang.StringIndexOutOfBoundsException
(试图访问不存在的引用)。
int yourInteger = 123450;
String s = String.format("%6.2f", yourInteger / 100.0);
System.out.println(s);
在大多数用例中,使用StringBuilder
(已回答)是一种很好的方法。但是,如果性能很重要,这可能是一个不错的选择。
/**
* Insert the 'insert' String at the index 'position' into the 'target' String.
*
* ````
* insertAt("AC", 0, "") -> "AC"
* insertAt("AC", 1, "xxx") -> "AxxxC"
* insertAt("AB", 2, "C") -> "ABC
* ````
*/
public static String insertAt(final String target, final int position, final String insert) {
final int targetLen = target.length();
if (position < 0 || position > targetLen) {
throw new IllegalArgumentException("position=" + position);
}
if (insert.isEmpty()) {
return target;
}
if (position == 0) {
return insert.concat(target);
} else if (position == targetLen) {
return target.concat(insert);
}
final int insertLen = insert.length();
final char[] buffer = new char[targetLen + insertLen];
target.getChars(0, position, buffer, 0);
insert.getChars(0, insertLen, buffer, position);
target.getChars(position, targetLen, buffer, position + insertLen);
return new String(buffer);
}
你可以用
System.out.printf("%4.2f%n", ((float)12345)/100));
根据评论,12345 / 100.0会更好,使用double而不是float会更好。
double
可能是一个更好的选择。float仅精确到6位数字。
如果您使用的系统中浮动价格昂贵(例如,没有FPU)或不允许使用(例如,在财务方面),则可以使用以下方法:
for (int i = 1; i < 100000; i *= 2) {
String s = "00" + i;
System.out.println(s.substring(Math.min(2, s.length() - 2), s.length() - 2) + "." + s.substring(s.length() - 2));
}
否则,DecimalFormat是更好的解决方案。(上面的StringBuilder变体不适用于小数(<100)
我认为,将这种字符串插入某个位置的一种更简单,更优雅的解决方案是:
target.replaceAll("^(.{" + position + "})", "$1" + insert);
例如,要:
在时间字符串中插入缺失值:
"-0300".replaceAll("^(.{3})", "$1:");
它的作用是匹配position
字符串开头的字符,对其进行分组,并用其自身($1
)替换该组,后跟insert
字符串。请注意replaceAll,即使总是发生一次,因为第一个参数必须是正则表达式。
当然,它不具有与StringBuilder解决方案相同的性能,但是我认为简洁和易于阅读的单行代码(与庞大的方法相比)简洁明了足以使它成为大多数非性能中的首选解决方案关键用例。
请注意,出于文档原因,我正在解决标题中的一般性问题,当然,如果要处理十进制数字,则应使用已经提出的针对特定领域的解决方案。
String.format(“%0d。%02d”,d / 100,d%100);
对于Kotlin帅哥;)从公认的答案中(@ MikeThomsen's)
fun String.insert(index: Int, string: String): String {
return this.substring(0, index) + string + this.substring(index, this.length)
}
测试✅
"ThisTest".insert(4, "Is").should.equal("ThisIsTest")
// Create given String and make with size 30
String str = "Hello How Are You";
// Creating StringBuffer Object for right padding
StringBuffer stringBufferRightPad = new StringBuffer(str);
while (stringBufferRightPad.length() < 30) {
stringBufferRightPad.insert(stringBufferRightPad.length(), "*");
}
System.out.println("after Left padding : " + stringBufferRightPad);
System.out.println("after Left padding : " + stringBufferRightPad.toString());
// Creating StringBuffer Object for right padding
StringBuffer stringBufferLeftPad = new StringBuffer(str);
while (stringBufferLeftPad.length() < 30) {
stringBufferLeftPad.insert(0, "*");
}
System.out.println("after Left padding : " + stringBufferLeftPad);
System.out.println("after Left padding : " + stringBufferLeftPad.toString());
试试这个 :
public String ConvertMessage(String content_sendout){
//use unicode (004E00650077) need to change to hex (N&#x;0065&#x;0077;) first ;
String resultcontent_sendout = "";
int i = 4;
int lengthwelcomemsg = content_sendout.length()/i;
for(int nadd=0;nadd<lengthwelcomemsg;nadd++){
if(nadd == 0){
resultcontent_sendout = "&#x"+content_sendout.substring(nadd*i, (nadd*i)+i) + ";&#x";
}else if(nadd == lengthwelcomemsg-1){
resultcontent_sendout += content_sendout.substring(nadd*i, (nadd*i)+i) + ";";
}else{
resultcontent_sendout += content_sendout.substring(nadd*i, (nadd*i)+i) + ";&#x";
}
}
return resultcontent_sendout;
}
String str = Integer.toString(j); //integer or string with white spaces<br/> str = new StringBuffer(str.trim()).insert(str.length()-2, ".").toString();