[java] 특정 위치에서 문자열에 문자를 삽입하는 방법은 무엇입니까?

나는에 받고 있어요 int6 자리 값. String의 끝에서 2 자리의 소수점 (.) 으로 표시하고 싶습니다 int. 나는를 사용하고 싶어 float하지만 사용하도록 제안되었다 String(대신 더 나은 디스플레이 출력 1234.5될 것입니다 1234.50). 따라서 int매개 변수로 매개 변수 String를 사용하고 끝에서 소수점 2 자리로 올바르게 형식이 지정된 함수가 필요합니다 .

말하다:

int j= 123456
Integer.toString(j);

//processing...

//output : 1234.56



답변

int j = 123456;
String x = Integer.toString(j);
x = x.substring(0, 4) + "." + x.substring(4, x.length());


답변

주석에서 언급했듯이 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();


답변

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);
}


답변

ApacheCommons3 StringUtils를 사용하면 다음을 수행 할 수도 있습니다.

int j = 123456;
String s = Integer.toString(j);
int pos = s.length()-2;

s = StringUtils.overlay(s,".", pos, pos);

기본적으로 하위 문자열 연결이지만 라이브러리 사용에 신경 쓰지 않거나 이미 StringUtils에 의존하는 경우 더 짧습니다.


답변

당신은 사용할 수 있습니다

System.out.printf("%4.2f%n", ((float)12345)/100));

의견에 따르면, float 대신 double을 사용하는 것처럼 12345 / 100.0이 더 좋습니다.


답변

float가 비싸거나 (예 : 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)에서 작동하지 않습니다.