[java] 문자열 바꾸기 방법이 문자를 바꾸지 않습니다.

문자열로 전달되는 문장이 있고 “and”라는 단어를 바꾸고 있는데 “”로 바꾸고 싶습니다. 그리고 “and”라는 단어를 공백으로 바꾸지 않습니다. 아래는 내 논리의 예입니다. 그리고 이것을 디버그하면 논리가 문장으로 떨어집니다.

String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
    sentence.replace("and", " ");
}

내가 여기에 빠진 것이 있습니까?



답변

그리고 이것을 디버그하면 논리가 문장으로 떨어집니다.

예, 그런 다음 반환 값을 버립니다.

Java의 문자열은 변경할 수 없습니다.를 호출 replace하면 기존 문자열 의 내용이 변경되지 않고 수정 된 문자열이 반환 됩니다. 따라서 원하는 :

sentence = sentence.replace("and", " ");

이 적용 모든 문자열 (의 방법 substring, toLowerCase등). 그들 중 어느 것도 문자열의 내용을 변경 하지 않습니다 .

조건에서 실제로이 작업을 수행 할 필요 는 없습니다. 결국 문장에를 포함 하지 않는"and" 경우 대체를 수행해도 해가되지 않습니다.

String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");


답변

문자열은 변경 불가능 하므로 내용을 변경할 수 없습니다. 전화 replace(this,that)하면 완전히 새로운 문자열로 끝납니다. 이 새 복사본을 유지하려면 변수에 할당해야합니다. 이전 참조 ( sentence = sentence.replace(this,that)아래에 표시된대로 la 또는 새 참조)를 덮어 쓸 수 있습니다 .

public class Test{

    public static void main(String[] args) {

        String sentence = "Define, Measure, Analyze, Design and Verify";

        String replaced = sentence.replace("and", "");
        System.out.println(replaced);

    }
}

제쳐두고, contains()여기서는 불필요한 호출이므로 수표를 제거했습니다 . 포함되지 않은 경우 교체는 교체에 실패합니다. 교체하는 것이 확인하는 실제 조건과 다른 경우에만 포함 메서드를 원할 것입니다.


답변

반환 값으로 아무것도하지 않습니다 replace. 새로운 메서드 인 결과를 할당해야합니다 String.

sentence = sentence.replace("and", " ");

A String는 Java에서 변경할 수 없습니다. 방법 좋아하는 replace새를 반환 String.

귀하의 contains시험은 불필요 : replace이 경우 단지 무 조작 할 수없는 텍스트의 인스턴스가 대체 없습니다.


답변

다음과 같이 교체 결과를 다시 할당해야합니다.

 sentence = sentence.replace("and", " ");

주의하십시오 String클래스는 불변의 의미, 모든 메서드의 새로운 문자열을 반환 결코 현재 위치에서 원래 문자열을 수정하지의 인스턴스의 메서드를 호출 한 결과, 그래서 String변수에 할당해야하거나 즉시 사용 변경 사항이 적용됩니다.


답변

package com.tulu.ds;

public class EmailSecurity {
    public static void main(String[] args) {
        System.out.println(returnSecuredEmailID("sample717@gmail.com"));
    }
    private static String returnSecuredEmailID(String email){
        String str=email.substring(1, email.lastIndexOf("@")-1);
        return email.replaceAll(email.substring(1, email.lastIndexOf("@")-1),replacewith(str.length(),"*"));
    }
    private static String replacewith(int length,String replace) {
        String finalStr="";
        for(int i=0;i<length;i++){
            finalStr+=replace;
        }
        return finalStr;
    }
}


답변