วิธีการแยกสตริงที่คั่นด้วยเครื่องหมายจุลภาค?


202

ฉันมีสตริงที่มีความยาวที่ไม่รู้จักซึ่งมีลักษณะเช่นนี้

"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.

1
ใช้วิธีการแยก ("แยกถ่าน") มันจะแยกวิธีการของคุณสตริง nad จะสร้างสตริงอาร์เรย์ที่มีคำแยก
Simon Dorociak

คำตอบ:


343

คุณสามารถทำสิ่งนี้:

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

โดยทั่วไป.split()วิธีการจะแบ่งสตริงตามตัวคั่น (ในกรณีนี้) ที่คุณกำลังผ่านและจะส่งกลับอาร์เรย์ของสตริง

อย่างไรก็ตามคุณดูเหมือนจะอยู่หลัง List of Strings แทนที่จะเป็นอาร์เรย์ดังนั้นอาร์เรย์จะต้องถูกเปลี่ยนเป็นรายการโดยใช้Arrays.asList()ยูทิลิตี ในฐานะที่เป็น FYI คุณสามารถทำสิ่งนี้ได้เช่น:

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

แต่โดยปกติแล้วมันเป็นการปฏิบัติที่ดีกว่าในการเขียนโปรแกรมไปยังส่วนต่อประสานแทนที่จะเป็นการใช้งานจริงอย่างเป็นรูปธรรม


9
โปรดทราบว่าสิ่งนี้จะไม่ตัดค่าเพื่อให้ strings.get (1) จะเป็น "cat" ไม่ใช่ "cat"
Alb

45
str.splitยอมรับ regex เพื่อให้คุณสามารถใช้str.split(",[ ]*");เพื่อให้คุณลบเครื่องหมายจุลภาคและช่องว่างหลังจากเครื่องหมายจุลภาค
จุดสุดยอด

4
ไฟล์ที่คั่นด้วยเครื่องหมายจุลภาค (csv) อาจมีเครื่องหมายจุลภาค aa อยู่ในเครื่องหมายคำพูดหมายความว่าไม่ใช่ตัวคั่น ในกรณีนี้การแยกจะไม่ทำงาน
Steven Trigg

2
ArrayList<String>ตัวเลือกที่สองต้องเป็นนักแสดงที่จะ
C_B

3
หากคุณต้องการเก็บรายการว่างไว้ (เช่นสำหรับความยาวของอาร์เรย์ที่สอดคล้องกัน) ให้ใช้ split (",", - 1) ตามstackoverflow.com/questions/14602062/…
Fast Engy

157

คุณต้องการแยกใช่ไหม

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

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

หากคุณต้องการกำจัดช่องว่างรอบ ๆ รายการเพิ่มเติม:

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

ใช่ว่าเป็นส่วนหนึ่งของการแก้ปัญหา OP น่าจะเป็นหลัง List of Strings ไม่ใช่อาร์เรย์
npinti

@npinti: ใช่, +1 กับคุณคุณเร็วขึ้นและฉันไม่ต้องการคัดลอกArrays.asList()สำนวนของคุณ
Tomasz Nurkiewicz

1
ฉันคอยคิดเป็นเวลา 10 ชั่วโมงจากนั้นค้นหา SO ไม่ทราบว่าเป็นเรื่องง่ายมากที่จะ. split ();
DeathRs

ถ้าคุณต้องการจัดเก็บรายการแยกที่เป็นผลลัพธ์ในชุดแทนที่จะเป็นในอาร์เรย์
โมเสส Kirathe

29

คุณสามารถแยกมันและสร้างอาร์เรย์จากนั้นเข้าถึงเหมือนอาร์เรย์

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

คุณสามารถเข้าถึงเช่น

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

หรือใช้วง

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

หวังว่ามันจะช่วยคุณ


18

การปรับปรุงเล็กน้อย: โซลูชันด้านบนจะไม่ลบช่องว่างนำหน้าหรือส่วนท้ายใน String จริง มันจะดีกว่าที่จะโทรเล็มก่อนที่จะโทรแยก แทนที่จะเป็นเช่นนี้

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

ใช้

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

1
สำหรับบรรทัดที่สองของคุณถ้าเราใช้การตัดแต่ง () แล้วเราไม่ต้องการการแบ่งช่องว่างเช่นเดียวกับการ("\\s*,\\s*")ใช้(",");สิ่งนี้จะส่งผลเหมือนกัน
พ่อมด

5
ฉันไม่แน่ใจว่า @WIZARD นั้นเพราะการตัดแต่งลบเฉพาะพื้นที่ด้านซ้ายและขวาของสตริง แต่ไม่รวมถึงพื้นที่ในนั้น ดังนั้นจะtrim(" string, with , space ") "string, with , space"
Thomas Leduc

@ThomasLeduc ถ้าสตริงเป็นเช่นนี้"dog, cat, bear, elephant, giraffe"แล้วต้องไม่trim()และในกรณี ur ถ้าใช้trim()แล้วออกวางจะ "string,with,space"ไม่ได้นี้"string, with , space"
WIZARD

trim()จะลบช่องว่างทั้งหมดไม่เพียง แต่พื้นที่ด้านซ้ายและด้านขวาของสตริง
WIZARD

5
คุณทดสอบหรือไม่ เพราะผมเพิ่งเขียนโปรแกรม Java และสตริง ผลตอบแทน" string, with , space ".trim() "string, with , space"เช่นเดียวกับ javadoc พูดว่า: ส่งคืนสำเนาของสตริงโดยเว้นช่องว่างนำหน้าและต่อท้าย คุณผิดและ @ user872858 นั้นถูกต้อง
Thomas Leduc

3

ก่อนอื่นคุณสามารถแยกชื่อเช่นนี้

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*");

3

เพื่อความสมบูรณ์โดยใช้ห้องสมุด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()ส่งกลับค่า Iterable ดังนั้นหากคุณต้องการ List ให้ปิดรายการดังLists.newArrayList()กล่าวข้างต้น มิฉะนั้นเพียงไปกับ Iterable ตัวอย่างเช่น:

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

หมายเหตุวิธีการtrimResults()จับทั้งหมดตัดความต้องการของคุณได้โดยไม่ต้องปรับแต่ง regexes สำหรับกรณีมุมString.split()เช่นเดียวกับ

หากโครงการของคุณใช้ Guava อยู่แล้วนี่ควรเป็นโซลูชันที่คุณต้องการ ดูเอกสารแยกส่วนในคู่มือผู้ใช้ Guavaหรือjavadocsสำหรับตัวเลือกการกำหนดค่าเพิ่มเติม


2

ลองกับสิ่งนี้ได้ผลกับฉัน

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

หรืออื่น ๆ

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

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);
    }

สนุก :)


0

ลบช่องว่างสีขาวทั้งหมดและสร้างรายการขนาดคงที่หรือไม่เปลี่ยนรูป (ดู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 คำตอบสำหรับการลบช่องว่างออกจากสตริงใน Java )


0

คุณสามารถใช้สิ่งนี้:

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

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

นอกจากนี้คุณจะต้องรวม libs:

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


0

ในคอตลิน

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

ที่stringArrayเป็นList<String>และcommasStringเป็นStringด้วยเครื่องหมายจุลภาคและช่องว่าง


0

นี่เป็นวิธีที่ง่ายในการแยกสตริงด้วยเครื่องหมายจุลภาค

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);
 }
}

รหัสนี้ฉันใช้สำหรับ JDK และถ้าคุณต้องการพิมพ์อาเรย์ ใช้ System.out.println
Sandun Susantha

-1

มีฟังก์ชั่นที่เรียกว่า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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.