문자열을 특정 위치에 삽입하는 방법
나 지금 들어가.int
6자리 숫자로. 경우 또는 A로 표시하고자 하는 경우String
의 끝에서 두 자리 숫자로 소수점(.)으로int
나는 a를 사용하고 싶었다.float
그러나 사용 권고를 받았다.String
더 나은 디스플레이 출력(의 표시)을 위해1234.5
될 것이다1234.50
을(를) 수 기능이 필요하다. 따라서, 나는 다음과 같은 기능을 필요로 한다.int
매개 변수로 사용 후 올바른 형식의 형식을 반환하십시오.String
끝에서 두 자리 숫자로 소수점.
말하라:
int j= 123456
Integer.toString(j);
//processing...
//output : 1234.56
논평에서 언급했듯이, StringBuilder는 StringBuffer를 사용하는 것보다 아마도 더 빠른 구현일 것이다.Java 문서에 언급된 바와 같이:
이 클래스는 StringBuffer와 호환되는 API를 제공하지만 동기화를 보장하지는 않는다.이 클래스는 스트링 버퍼가 하나의 스레드에 의해 사용되던 장소에서 스트링버퍼의 드롭인 대체품으로 사용하기 위해 설계되었다(일반적으로 그러함).가능한 경우 대부분의 구현에서 이 클래스가 더 빠르기 때문에 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 j = 123456;
String x = Integer.toString(j);
x = x.substring(0, 4) + "." + x.substring(4, x.length());
int yourInteger = 123450;
String s = String.format("%6.2f", yourInteger / 100.0);
System.out.println(s);
ApacheCommons3 StringUtils를 사용하면 다음과 같은 작업을 수행할 수 있다.
int j = 123456;
String s = Integer.toString(j);
int pos = s.length()-2;
s = StringUtils.overlay(s,".", pos, pos);
기본적으로 하위 문자열 연결이지만 라이브러리를 사용하거나 이미 StringUtils에 의존하는 경우 더 짧음
대부분의 사용 사례에서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);
}
Kotlin dudes;) 승인된 답변(@MikeThomsen's)에서 나온 말이다.
fun String.insert(insertAt: Int, string: String): String {
return this.substring(0, insertAt) + string + this.substring(insertAt, this.length)
}
시험 ✅
"ThisTest".insert(insertAt = 4, string = "Is").should.equal("ThisIsTest")
당신은 사용할 수 있다.
System.out.printf("%4.2f%n", ((float)12345)/100));
코멘트에 따르면, 플로트 대신 더블을 사용하는 것과 마찬가지로 12345/100.0이 더 나을 것이다.
문자열.format("%0d.%02d", d / 100, d % 100);
플로트가 비싸거나(예: 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));
}
그렇지 않으면 십진 포맷이 더 나은 해결책이다.(위의 StringBuilder 변종은 작은 숫자(<100)로 작동하지 않음)
String을 특정 위치에 삽입하는 보다 간단하고 우아한 해결책은 다음과 같은 단일 라이너일 것이다.
target.replaceAll("^(.{" + position + "})", "$1" + insert);
예를 들어, 결측값을 삽입하려면:
시간 문자열로 변환:
"-0300".replaceAll("^(.{3})", "$1:");
그게 하는 일은, 성냥개비야.position
문자열의 시작 부분에 있는 문자, 그룹을 그룹화하고 그룹을 자체로 대체($1
) 그 뒤를 이어insert
끈을 매다replaceAll을 주의하십시오. 항상 한 가지 발생이 있더라도 첫 번째 매개 변수는 regex여야 함.
물론 StringBuilder 솔루션과 같은 성능을 가지고 있지는 않지만, 단순하고 읽기 쉬운 원라이너로서의 간결함과 우아함은 (대부분의 큰 방법에 비해) 대부분의 비성능 크리티컬 사용 사례에서 선호하는 솔루션으로 만들기에 충분하다고 생각한다.
참고 나는 문서화 이유로 제목에 있는 일반적인 문제를 해결하고 있으며, 물론 소수점 숫자를 다루고 있다면 이미 제안된 도메인별 솔루션을 사용해야 한다.
여기에 좋은 해답이 있지만, Kotlin 확장 기능을 추가하면 훨씬 더 간단하게 할 수 있다.
val indexWhereInsertIsIntended = 2
val inputString = "2408"
val resultingString = inputString.toCharArray().toMutableList()
.also {
it.add(indexWhereInsertIsIntended, '/')
}.joinToString("")
결과 = 24/08
이 예는 카드 유효기간을 나타내며, 슬래시(/)는 2차 지수를 대상으로 한다.따라서 이 사례의 결과 지수는 2차 지수에 / 있을 것이다.
변경하고 추가하지 않으려면:
val indexWhereInsertIsIntended = 2
val inputString = "2408"
val resultingString = inputString.toCharArray()
.also {
it[indexWhereInsertIsIntended] = '/'
}.joinToString("")
결과 = 24/0
public static void main(String[] args) {
char ch='m';
String str="Hello",k=String.valueOf(ch),b,c;
System.out.println(str);
int index=3;
b=str.substring(0,index-1 );
c=str.substring(index-1,str.length());
str=b+k+c;
}
// 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;
}
'IT이야기' 카테고리의 다른 글
Visual Studio 디버거 오류:프로그램을 시작할 수 없음 지정된 파일을 찾을 수 없음 (0) | 2022.05.09 |
---|---|
스위치 케이스의 구문은 유효하지만 가치가 없는 구문인가? (0) | 2022.05.09 |
사용자가 Laravel에서 인증된 경우 Vue 구성 요소를 체크인하는 방법 (0) | 2022.05.09 |
구성 요소에 이벤트 수신기가 연결되어 있는지 확인하십시오. (0) | 2022.05.09 |
포맷된 IO 함수(*printf / *scanf)에서 변환 지정자 %i와 %d의 차이점 (0) | 2022.05.09 |