回答:
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
(すでに回答したように)aを使用することがこれを行うための良い方法です。ただし、パフォーマンスが重要な場合は、これが適切な代替手段になる可能性があります。
/**
* 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));
コメントのとおり、floatの代わりにdoubleを使用する場合と同様に、12345 / 100.0の方が適しています。
double
良い選択かもしれません。floatは6桁までしか正確ではありません。
フロートが高価(FPUなしなど)やシステムで使用されている場合(たとえば、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)では機能しません
文字列を特定の位置に挿入するためのよりシンプルでエレガントな解決策は、次の1行だと思います。
target.replaceAll("^(.{" + position + "})", "$1" + insert);
たとえば、欠落:
した時間を文字列に挿入するには、次のようにします。
"-0300".replaceAll("^(.{3})", "$1:");
それが行うことは、position
文字列の先頭からの文字に一致し、それをグループ化し、グループをそれ自体($1
)とそれに続くinsert
文字列で置き換えます。最初のパラメータは正規表現でなければならないので、常に1つしか発生しませんが、replaceAllに注意してください。
もちろん、StringBuilderソリューションと同じパフォーマンスはありませんが、シンプルで読みやすいワンライナー(巨大なメソッドと比較して)としての簡潔さと優雅さは、ほとんどの非パフォーマンスで推奨されるソリューションにするのに十分だと思います-クリティカルなユースケース。
注意:ドキュメント上の理由から、タイトルの一般的な問題を解決しています。もちろん、10進数を扱う場合は、既に提案されているドメイン固有のソリューションを使用する必要があります。
String.format( "%0d。%02d"、d / 100、d%100);
コトリン男のために;)受け入れられた答え(@ 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();