2017-01-27 1 views
0

for 루프가있는 문자열에 문자를 삽입하고 싶습니다. 나는 for 루프없이 그것을하는 법을 안다. :for 루프를 통해 문자열에 문자 삽입

String s = "Hello"; 
String x = " "; 
x = s.substring(0, 1) + "*" +s.substring(1, 2) + "*" + s.substring(2,3) +"*"+s.substring(3,4) +"*" +s.substring(4,5); 
System.out.println(x); 

그러나 지금은 루프에서 그것을 할 때, 나는 문제가있다. 내 방법은 다음

String y =""; 
for(int i= 0; i<=s.length(); i++){ 
    y = s.substring(0, i) + "*" +s.substring(i); 
} 
System.out.println(y); 
+0

루프 여야합니까? – Pshemo

+0

'String y = s.replaceAll ("(?!^| $)", "*");' – Holger

답변

0

를 사용하는 것이 좋습니다 그것은 더 효율적이 예에서는

String x = "Hello"; 
StringBuilder y = new StringBuilder(String.valueOf(x.charAt(0))); 
for(int i= 1; i<x.length(); i++) 
    y.append("*").append(x.charAt(i)); 
System.out.println(y); 

코드 모두에 대한 출력이다,332 10

+0

몇 가지 문제 : (1) 예제가 컴파일되지 않을 것이며, (2) 예상 결과가 제공되지 않습니다. 또한 우리는 실제로'charAt'를 사용해야 만합니다 * 다른 방법이 있습니다. – Pshemo

+0

나를 많이 도왔습니다! 감사합니다 :) – lks95

+0

오직 첫 번째 예제는 OP가 기대하는 것을 수행합니다. '새로운 StringBuilder (x.charAt (0))'는 당신이 생각하는대로하지 않습니다. 힌트 :'StringBuilder (char)'생성자가 없으며 대신'StringBuilder (int)'가 사용됩니다. – Pshemo

2

방법에 대해 :

String input = "TestInput"; 

    StringBuilder b = new StringBuilder(); 
    b.append(input.charAt(0)); 
    for (int i = 1; i < input.length(); i++) { 
     b.append("*").append(input.charAt(i)); 
    } 
    System.out.println(b); 
} 

이 제공 :

T*e*s*t*I*n*p*u*t 

이 당신이 원하는 무엇인가?

편집 : Pshemo의 제안 - StringJoiner (자바 8 솔루션)를 사용

StringJoiner sj = new StringJoiner("*"); 
     for (int i = 0; i < input.length(); i++) { 
      sj.add(input.substring(i, i + 1)); 
     } 
     System.out.println(sj.toString()); 

없이 StringBuilder 버전 :

String input="TestInput"; 
    String y = ""; 
    for (int i = 0; i < input.length(); i++) { 
     y += "*" + input.charAt(i); 
    } 

그리고 당신의 knowlage에

- 사용 문자열 연결이 좋습니다.

String x = "Hello"; 
String y =String.valueOf(x.charAt(0)); 
for(int i= 1; i<x.length(); i++) 
    y += "*"+x.charAt(i); 
System.out.println(y); 

내 조언이 사용 StringBuilder 대신 문자열이다 : 당신이 그냥 StringIndexOutOfBoundException를 얻기 위해, 문자열 경계의 인식, 두 번째 코드에서 charAt 방법을 사용할 수 있습니다 StringBuilder 또는 StringJoiner

+0

또는 Java 8 이후로'*'를 구분 기호로 사용하여'StringJoiner'를 사용할 수 있습니다. – Pshemo

+0

네가 기본적으로 내가 원하는 걸. 나는 자바에 익숙하지 않은데, 나는 아직 append 메소드를 모른다. .append없이 할 수 있습니까? – lks95

+0

@ Iks95 추가 답변 2 답변 – Antoniossss

0
public static String insertChar(String str, char character){ 

    char[] charArray=str.toCharArray(); 
    String result=""; 
    for(int i=0;i<charArray.length;i++){ 
     result=result+charArray[i]; 
     if(i<charArray.length-1){ 
      result=result+character; 
     } 
    } 
    return result; 
} 

System.out.println (insertChar ("Hello", '*'))); 자바에서

3

는 다음과 같은

String x = "Hello"; 
String result = Stream.of(x.split("")) 
         .collect(Collectors.joining("*")); 

결과 H*e*l*l*o을 할 수 8+.

기본적으로 길이가 1 인 문자열 스트림을 만들고 *을 사용하여 이들을 조인하는 콜렉터를 사용하여 수집합니다. 이 방법에서는 추가 (당신이 언급 한 바와 같이) 루프를 사용하여 코드를 다음 따를 수 있습니다 ..

3
 String s = "Hello"; 
     String x = String.join("*",s.split("")); 
     System.out.println(x); 
0

를 마지막/첫 번째 요소와 같은 어떤 공간적 경우를 고려 또는 종료 등에서 * 추가 ​​제거 할 필요는 없습니다 문자열에서 문자열로.

String s = "HelloWorld"; 
    String y =""; 
    Character c = '*'; 
    int length = s.length(); 

    for(int i = 1; i<= length; i++) { 
     if(i == length) 
      y += s.substring(i-1, i); 
     else 
      y += s.substring(i-1, i) + c; 
    } 

    System.out.println(y); 
관련 문제