programing

문자열 내의 모든 문자에 각 루프를 적용하려면 어떻게 해야 하나요?

sourcejob 2022. 9. 26. 21:59
반응형

문자열 내의 모든 문자에 각 루프를 적용하려면 어떻게 해야 하나요?

그래서 저는 문자열에 있는 각 문자에 대해 반복하고 싶습니다.

그래서 나는 생각했다.

for (char c : "xyz")

컴파일러 에러가 표시됩니다.

MyClass.java:20: foreach not applicable to expression type

이거 어떻게 해?

각자에게 가장 쉬운 방법char에 있어서String사용하는 것이다toCharArray():

for (char ch: "xyz".toCharArray()) {
}

이렇게 하면 각 구성의 간결성을 얻을 수 있지만 아쉽게도String(불변)는 디펜스 카피를 실행하여char[](변환 가능) 비용이 발생합니다.

매뉴얼에서 다음 항목을 참조하십시오.

[toCharArray()길이가 이 문자열의 길이이고 내용이 이 문자열로 표현되는 문자 시퀀스를 포함하도록 초기화되어 있는 새로 할당된 문자 배열이 반환됩니다.

배열의 문자를 반복하는 보다 상세한 방법이 있습니다(루프의 경우 일반, 루프의 경우).CharacterIterator(등) 단, 비용을 지불할 의향이 있습니다.toCharArray()각각이 가장 간결하다.

String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
   char c = s.charAt(i);
}

 

또 다른 유용한 솔루션은 이 문자열을 String 배열로 사용할 수 있습니다.

for (String s : "xyz".split("")) {
    System.out.println(s);
}

Java 8을 사용하는 경우chars()에서String을 얻다Stream배역을 정해야 합니다.int로 되돌아가다char~하듯이chars()반환하다IntStream.

"xyz".chars().forEach(i -> System.out.print((char)i));

Java 8을 Eclipse 컬렉션과 함께 사용하는 경우CharAdapter학급forEach람다를 포함한 방법 또는 방법 참조를 사용하여 a의 모든 문자에 대해 반복할 수 있습니다.String.

Strings.asChars("xyz").forEach(c -> System.out.print(c));

이 예에서는 메서드 참조를 사용할 수도 있습니다.

Strings.asChars("xyz").forEach(System.out::print)

주의: 저는 Eclipse Collections의 커밋입니다.

String 클래스의() 메서드를 사용하여 String 개체를 char 배열로 변환해야 합니다.

String str = "xyz";
char arr[] = str.toCharArray(); // convert the String object to array of char

// iterate over the array using the for-each loop.       
for(char c: arr){
    System.out.println(c);
}

Java 8에서는 다음과 같이 해결할 수 있습니다.

String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));    

메서드 chars()는 다음 값을 반환합니다.IntStream다음 문서에 기재된 바와 같이:

이 시퀀스에서 char 값을 확장하는 int 제로 스트림을 반환합니다.대리 코드 포인트에 매핑되는 모든 문자는 해석되지 않은 상태로 전달됩니다.스트림을 읽는 동안 시퀀스가 변환되면 결과는 정의되지 않습니다.

사용하는 이유forEachOrdered가 아니라forEach?

의 동작forEach명백하게 확정적이지 않다.forEachOrdered는 스트림에 만남 순서가 정의된 경우 스트림의 만남 순서로 이 스트림의 각 요소에 대해 액션을 수행합니다.그렇게forEach주문이 유지된다는 보장은 없습니다.자세한 것은, 질문도 확인해 주세요.

또,codePoints()자세한 내용은 다음 답변을 참조하십시오.

는 'Java'를 않습니다.StringIterable<Character>이것은 쉽게 할 수 있다.StringCharacterIterator조차 되지 Iterator만의 것을 :...자신의 것을 만들자.

public class CharSequenceCharacterIterable implements Iterable<Character> {
    private CharSequence cs;

    public CharSequenceCharacterIterable(CharSequence cs) {
        this.cs = cs;
    }

    @Override
    public Iterator<Character> iterator() {
        return new Iterator<Character>() {
            private int index = 0;

            @Override
            public boolean hasNext() {
                return index < cs.length();
            }

            @Override
            public Character next() {
                return cs.charAt(index++);
            }
        };
    }
}

수 있게 .for (char c : new CharSequenceCharacterIterable("xyz"))

이 경우 람다를 사용할 수도 있습니다.

    String s = "xyz";
    IntStream.range(0, s.length()).forEach(i -> {
        char c = s.charAt(i);
    });

에는, 「」를 사용할 .charAt()현악기로요.

예를 들어 다음과 같습니다.

String str = "xyz"; // given String
char st = str.charAt(0); // for example we take 0 index element 
System.out.println(st); // print the char at 0 index 

charAt()는 특정 문자의 문자열을 트래버스에 도움이 되는 Java 문자열 처리 방식입니다.

언급URL : https://stackoverflow.com/questions/2451650/how-do-i-apply-the-for-each-loop-to-every-character-in-a-string

반응형