Java เทียบเท่ากับ Explode และ Implode (PHP) [ปิด]


94

ฉันเป็นคนใหม่ใน Java แม้ว่าจะมีประสบการณ์ที่ดีใน PHP และกำลังมองหาการแทนที่ที่สมบูรณ์แบบสำหรับฟังก์ชันระเบิดและการระเบิด (มีใน PHP) ใน Java

ฉันใช้ Google แบบเดียวกัน แต่ไม่พอใจกับผลลัพธ์ ใครมีทางออกที่ดีสำหรับปัญหาของฉันจะได้รับการชื่นชม

ตัวอย่างเช่น:

String s = "x,y,z";
//Here I need a function to divide the string into an array based on a character.
array a = javaExplode(',', s);  //What is javaExplode?
System.out.println(Arrays.toString(a));

ผลลัพธ์ที่ต้องการ:

[x, y, z]

3
ตกลงคุณพบวิธีแก้ไขอะไรบ้าง?
Konstantin Yovkov

7
ทำไมคำถามนี้จึงถูกโหวตลง? และนอกหัวข้อ ?? โปรดแนะนำเพื่อหลีกเลี่ยงคำถามถัดไป
Pankaj Wanjari

19
ฉันคิดว่าจากการนับยอดดูคำถามนี้ไม่เลวเลย ฉันยอมรับว่ามันเป็นคำถามแปลก ๆ แต่พวกเราหลายคนโปรแกรมเมอร์ PHP เพียงแค่ google สำหรับ java ระเบิดแล้วรับคำตอบที่ถูกต้อง
gorgi93

6
ตอนนี้มันเป็นเดือนพฤศจิกายน 2014 และฉัน googled java string ระเบิดและคำถามนี้ยังคงออกมาเป็นผลลัพธ์อันดับต้น ๆ ฉันคิดว่าสถานะ 'ปิดเป็นนอกหัวข้อ' ควรจะถูกยกขึ้นเนื่องจากนี่ไม่ใช่เรื่องนอกหัวข้อเลยสำหรับฉัน
Chen Li Yong

3
เดือนกุมภาพันธ์ 2016 คำถามนี้เป็นผลลัพธ์หลักสำหรับ "java Explode"
undefined

คำตอบ:


140

Javadoc สำหรับ Stringเผยให้เห็นว่าเป็นสิ่งที่คุณกำลังมองหาในเรื่องการString.split()explode

Java ไม่รวม "การระเบิด" ของ "join" ที่เทียบเท่า แทนที่จะรวมการพึ่งพาภายนอกขนาดใหญ่สำหรับฟังก์ชันง่ายๆตามที่คำตอบอื่น ๆ แนะนำคุณอาจต้องการเขียนโค้ดสองสามบรรทัด มีหลายวิธีที่จะทำให้สำเร็จ ใช้ a StringBuilderis one:

String foo = "This,that,other";
String[] split = foo.split(",");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.length; i++) {
    sb.append(split[i]);
    if (i != split.length - 1) {
        sb.append(" ");
    }
}
String joined = sb.toString();

ขอบคุณสำหรับทุกคำตอบของคุณ
Pankaj Wanjari

1
Split ใช้นิพจน์ทั่วไป (ใน PHP, Perl, Java และอื่น ๆ ) หากคุณต้องการแยกสัญลักษณ์อื่นจะต้องมีการ Escape ดังนี้: String [] split = foo.split ("\\ (");
HoldOffHunger

2
โปรดทราบว่าตั้งแต่Java 8เรามีString#join( เอกสารประกอบ ) สำหรับตัวอย่างของคุณ: String joined = String.join(" ", split);. เมธอดใช้StringJoinerคลาส
Zabuzard

24

String.split() สามารถให้คุณเปลี่ยนสำหรับ explode()

สำหรับการเปลี่ยนของimplode()ฉันแนะนำให้คุณเขียนทั้งฟังก์ชั่นที่กำหนดเองหรือการใช้งานApache CommonsของStringUtils.join()ฟังก์ชั่น


16

ทางเลือกที่ดีคือวิธี String.split และ StringUtils.join

ระเบิด:

String[] exploded="Hello World".split(" ");

Implode:

String imploded=StringUtils.join(new String[] {"Hello", "World"}, " ");

โปรดทราบว่า StringUtils นั้นอยู่ในไลบรารีภายนอก


1
คุณหา StringUtils ได้ที่ไหน ฉันพบคลาสนี้ใน com.sun.internal และ com.sun.deploy แต่ฉันไม่คิดว่าเป็นความคิดที่ดีที่จะใช้คลาสภายใต้ com.sun โดยตรงpackages such as sun., that are outside of the Java platform, can be different across OS platforms (Solaris, Windows, Linux, Macintosh, etc.) and can change at any time without notice with SDK versions
Arnaud Denoyelle

ตกลงหลังจากแก้ไขแล้วฉันเห็นว่าคลาสนี้มาจาก lib ภายนอก
Arnaud Denoyelle

... ซึ่งก็คือAppache Commons (ฉันเดา): StringUtils
crusy


4

ฉันไม่คุ้นเคยกับ PHP แต่ฉันคิดว่าString.splitเป็น Java เทียบเท่ากับ explodePHP สำหรับimplodeไลบรารีมาตรฐานไม่มีฟังก์ชันดังกล่าว คุณเพียงแค่ย้ำกว่าอาร์เรย์และสร้างสตริงของคุณโดยใช้StringBuilder / StringBuffer หรือคุณสามารถลองที่ดีเยี่ยมของ Google ฝรั่ง Splitterและช่างไม้หรือsplit/joinวิธีการจากApache Commons StringUtils


1
ลิงก์ทั้งหมดใช้ได้ยกเว้น Guava เนื่องจาก 3 ปีผ่านไปจึงย้ายไปที่ GitHub ฉันได้อัปเดตความคิดเห็นด้วยลิงก์ใหม่
Ivan Sharamet

0

หากคุณกำลังพูดถึงในการอ้างอิงของ String Class เพื่อให้คุณสามารถใช้

subString / แยก

สำหรับ Explode & ใช้ String

ต่อกัน

สำหรับ Implode


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