programing

쉼표로 구분된 문자열을 분할하려면 어떻게 해야 합니까?

prostudy 2022. 7. 10. 21:34
반응형

쉼표로 구분된 문자열을 분할하려면 어떻게 해야 합니까?

다음과 같은 알 수 없는 길이의 문자열이 있습니다.

"dog, cat, bear, elephant, ..., giraffe"

각 단어가 ArrayList의 요소가 되도록 쉼표로 이 문자열을 분할하는 최적의 방법은 무엇입니까?

예를들면

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

다음과 같이 할 수 있습니다.

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

기본적으로 메서드는 전달 중인 (이 경우) 딜리미터에 따라 문자열을 분할하고 문자열 배열을 반환합니다.

단, 배열이 아닌 문자열 목록을 원하는 것 같기 때문에 유틸리티를 사용하여 배열이 목록으로 변환되어야 합니다.참고인으로서 다음과 같은 작업을 수행할 수도 있습니다.

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

그러나 실제 구현보다는 인터페이스에 프로그래밍하는 것이 일반적으로 더 좋기 때문에 첫 번째 옵션을 추천합니다.

그럼 헤어지고 싶지?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

항목 주위의 공백을 추가로 제거하려면 다음 절차를 따릅니다.

String[] animalsArray = animals.split("\\s*,\\s*");

분할하여 어레이를 만든 후 어레이처럼 액세스할 수 있습니다.

String names = "prappo,prince";
String[] namesList = names.split(",");

인덱스로 액세스할 수 있습니다.

String name1 = namesList [0];
String name2 = namesList [1];

또는 루프를 사용하여

for(String name : namesList){
    System.out.println(name);
}

약간의 개선: 위의 솔루션은 실제 String의 선행 또는 후행 공백을 제거하지 않습니다.스플릿을 부르기 전에 트림을 부르는 것이 좋습니다.이런 거 말고

 String[] animalsArray = animals.split("\\s*,\\s*");

사용하다

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

먼저 이렇게 이름을 나눌 수 있습니다.

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

동물에 접근하기 위해

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

그리고 동물 이름 주위에 있는 공백과 쉼표를 제거하고 싶다.

String animals_list[] = animals.split("\\s*,\\s*");

완전성을 위해 Guava 라이브러리를 사용하여 다음을 수행합니다.Splitter.on(",").split(“dog,cat,fox”)

또 다른 예는 다음과 같습니다.

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()는 Itable을한 경우 .Lists.newArrayList()'Itable' 를 들면 'Itable'로 해요.

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

note에 주의해 주세요.trimResults()모서리 케이스의 정규식을 조정할 필요 없이 트리밍 요구를 모두 처리합니다.String.split().

프로젝트에서 이미 Guava를 사용하고 있는 경우, 이것이 권장되는 솔루션입니다.자세한 설정 옵션에 대해서는, Guava 유저 가이드 또는 javadoc 의 스플리터 메뉴얼을 참조해 주세요.

이걸로 해볼 수 있어?

 sg = sg.replaceAll(", $", "");

그렇지 않으면

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

build.gradle에서 Guava 추가

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

그리고 나서.

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

즐기다:)

간단하고 간단한 솔루션:-

문자열 str="테스트 1, 테스트 2, 테스트 3";

List<String> elementList = Arrays.asList(str.replaceAll("\\s*,\\s*", ",").split(","));

출력=["테스트 1", 테스트 2", 테스트 3]

모든 경우에 효과가 있습니다.

나중에 고마워 :-)

모든 공백을 삭제하고 고정 크기 또는 불변 목록을 작성합니다( 참조).asList API 문서)

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

사용할 수도 있습니다.replaceAll(\\s+", "")그러나 최대 효율은 사용 사례에 따라 달라집니다.(자바의 문자열에서 공백 삭제에 대한 @GurselKoca 답변 참조)

다음과 같은 것을 사용할 수 있습니다.

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

또, 립도 포함시켜 주세요.

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;

사용방법:

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));

코틀린에서는

val stringArray = commasString.replace(", ", ",").split(",")

어디에stringArrayList<String>그리고.commasStringString쉼표와 공백으로

이것은 문자열을 콤마로 분할하는 간단한 방법입니다.

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

"Old School"(JDK 1.0) java.util 클래스 String Tokenizer:

String Tokenizer(String str, String 구분자)

import java.util.*;

public class Tokenizer {
        public static void main(String[] args) {
                String str = "dog, cat, bear, elephant, ..., giraffe";
                StringTokenizer tokenizer = new StringTokenizer(str, ",");

                List<String> strings = new ArrayList<String>();

                while (tokenizer.hasMoreTokens()) {
                        // if need to trim spaces .trim() or use delim like ", "
                        String token = tokenizer.nextToken().trim();
                        strings.add(token);
                }
                // test output
                strings.forEach(System.out::println);
        }
}

NB: StringTokenizer는 호환성을 위해 유지되는 레거시 클래스입니다.단, 새로운 코드에서는 사용이 권장되지 않습니다.이 기능을 원하는 사용자는 String 또는 java.util.regex 패키지의 분할 방식을 사용하는 것이 좋습니다.

예:

import java.util.regex.*;
...
// Recommended method<?>
Pattern commaPattern = Pattern.compile("\\s*,\\s*");
String[] words = commaPattern.split(str);
List<String> wordList = new ArrayList<String>(Arrays.asList(words));

// test output
wordList.forEach(System.out::println);
...

라고 하는 기능이 있습니다.replaceAll()원하는 것으로 교체하여 모든 화이트 스페이스를 제거할 수 있습니다.예로서

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

다음과 같은 것이 있습니다.

First:15.94, Second:16.01

언급URL : https://stackoverflow.com/questions/10631715/how-to-split-a-comma-separated-string

반응형