การแปลงสตริงเป็นสตริงอาร์เรย์ใน java


115

ฉันมีstring = "name"; ฉันต้องการแปลงเป็นสตริงอาร์เรย์ ฉันต้องทำอย่างไร? มี java ในตัวหรือไม่? ฉันสามารถทำได้ด้วยตนเอง แต่ฉันกำลังค้นหาฟังก์ชัน java ในตัว

ฉันต้องการอาร์เรย์ที่อักขระแต่ละตัวของสตริงจะเป็นสตริง เช่น char 'n' จะถูกเก็บเป็นสตริง "n" ในอาร์เรย์


10
ฉันเดาว่าคุณไม่ได้หมายความString[] ary = new String[] { "name" };ว่าคุณต้องการดำเนินการอะไร แยกตัวอักษรเช่น?
rsp

คุณหมายถึงสตริงอาร์เรย์หรือไม่? คุณจะมีฟังก์ชันสำหรับสิ่งนั้นได้อย่างไรมันจะเป็น: String [] array = {"Name"}; หรือคุณหมายถึงอาร์เรย์อักขระ?
Woody

1
ฉันต้องการอาร์เรย์ที่อักขระแต่ละตัวของสตริงจะเป็นสตริง เช่น char 'n' จะถูกเก็บไว้ในอาร์เรย์
riyana

คำตอบ:


201

ในการเริ่มงานของคุณให้String.splitแยกสตริงในนิพจน์ทั่วไปและนิพจน์นี้อาจเป็นสตริงว่าง:

String[] ary = "abc".split("");

ให้อาร์เรย์:

(java.lang.String[]) [, a, b, c]

การกำจัดรายการที่ 1 ที่ว่างเปล่าทิ้งไว้เป็นแบบฝึกหัดสำหรับผู้อ่าน :-)

หมายเหตุ:ใน Java 8 องค์ประกอบแรกว่างจะไม่รวมอยู่อีกต่อไป


21
หมายเหตุ: เมื่อใช้ jdk8 รายการแรกที่ว่างเปล่าจะไม่รวมอยู่ในอาร์เรย์ผลลัพธ์อีกต่อไป ดูstackoverflow.com/questions/22718744/…
Alexis C.

42
String strName = "name";
String[] strArray = new String[] {strName};
System.out.println(strArray[0]); //prints "name"

บรรทัดที่สองจัดสรรสตริงอาร์เรย์ที่มีความยาว 1 โปรดทราบว่าคุณไม่จำเป็นต้องระบุความยาวด้วยตัวเองเช่น:

String[] strArray = new String[1];

แทนความยาวจะถูกกำหนดโดยจำนวนองค์ประกอบใน initalizer การใช้

String[] strArray = new String[] {strName, "name1", "name2"};

สร้างอาร์เรย์ที่มีความยาว 3


22
ไม่ตอบคำถามจริงๆ
atamanroman

1
ตรวจสอบประวัติการแก้ไขของคำถามและคุณจะเห็นว่าคำถามกำลังถามถึงสิ่งที่แตกต่างก่อนที่จะแก้ไข คำตอบนี้ตอบกลับไปยังเวอร์ชันแรก
f1sh

14

สมมติว่าคุณต้องการอาร์เรย์ของสตริงอักขระเดี่ยว (ไม่ใช่ a char[]หรือCharacter[])

1. การใช้ regex:

public static String[] singleChars(String s) {
    return s.split("(?!^)");
}

Lookahead เชิงลบที่มีความกว้างเป็นศูนย์ป้องกันการจับคู่รูปแบบที่จุดเริ่มต้นของอินพุตดังนั้นคุณจะไม่ได้รับสตริงว่างที่นำหน้า

2. การใช้ฝรั่ง :

import java.util.List;

import org.apache.commons.lang.ArrayUtils;

import com.google.common.base.Functions;
import com.google.common.collect.Lists;
import com.google.common.primitives.Chars;

// ...

public static String[] singleChars(String s) {
    return
        Lists.transform(Chars.asList(s.toCharArray()),
                        Functions.toStringFunction())
             .toArray(ArrayUtils.EMPTY_STRING_ARRAY);
}

1
regexp นั้นเป็น IMO ที่ดีที่สุด ระวังว่า Java 8 แก้ไขปัญหานั้นแล้ว
shkschneider

13

ฉันเดาว่าไม่มีความจำเป็นสำหรับมันเพราะมันจะไม่ง่ายไปกว่านี้

String[] array = {"name"};

แน่นอนถ้าคุณยืนยันคุณสามารถเขียน:

static String[] convert(String... array) {
   return array;
}

String[] array = convert("name","age","hobby"); 

[แก้ไข] หากคุณต้องการสตริงตัวอักษรเดียวคุณสามารถใช้:

String[] s = "name".split("");

น่าเสียดายที่ s [0] จะว่างเปล่า แต่หลังจากนี้ตัวอักษร n, a, m, e จะตามมา หากเป็นปัญหาคุณสามารถใช้เช่น System.arrayCopy เพื่อกำจัดรายการอาร์เรย์แรก


ฉันต้องการอาร์เรย์ที่อักขระแต่ละตัวของสตริงจะกลายเป็นสตริง เช่น char 'n' จะถูกเก็บไว้ในอาร์เรย์
riyana

@Landei ฉันมี String date = "2013/01/05" และเมื่อฉันใช้. split ("/") มันจะไม่ส่งคืนสตริงว่างเป็น [0] และทำงานได้ดี มีความแตกต่างระหว่างตัวแยกนิพจน์ทั่วไปกับของคุณหรือไม่?
Behzad

@Behzad AFAIK คุณมีพฤติกรรมตลก ๆ กับรายการว่างสำหรับรูปแบบที่ว่างเปล่าเท่านั้นไม่ใช่ของคุณมีตัวคั่น
Landei

@Landei ให้ฉันรู้ว่าฉันมีความหมายของคุณ คุณหมายความว่าการใช้เฉพาะ "" ในฟังก์ชันการแยกส่งกลับ 0 เป็นค่าอาร์เรย์แรก ใช่?
Behzad

12
String data = "abc";
String[] arr = explode(data);

public String[] explode(String s) {
    String[] arr = new String[s.length];
    for(int i = 0; i < s.length; i++)
    {
        arr[i] = String.valueOf(s.charAt(i));
    }
    return arr;
}

11

ใน java 8 มีวิธีการที่คุณสามารถทำได้: toCharArray ():

String k = "abcdef";
char[] x = k.toCharArray();

ผลลัพธ์นี้เป็นอาร์เรย์ต่อไปนี้:

[a,b,c,d,e,f]

แม้ว่าจะไม่ใช่สตริงอาร์เรย์ แต่ก็เหมาะสำหรับกรณีที่คุณต้องการอักขระแทนที่จะเข้าถึงแบบโง่ ๆString.charAt(0)บนสตริงอักขระเดี่ยวโดยไม่จำเป็น! ;)
varun

คุณช่วยชีวิตฉันไว้ @fonji
Amit Sharma

5

String array = อาร์เรย์ของอักขระ?

หรือคุณมีสตริงที่มีหลายคำซึ่งแต่ละคำควรเป็นองค์ประกอบอาร์เรย์

String[] array = yourString.split(wordSeparator);


ฉันต้องการอาร์เรย์ที่อักขระแต่ละตัวของสตริงจะเป็นสตริง เช่น char 'n' จะถูกเก็บไว้ในอาร์เรย์
riyana

4

เพียงใช้.toCharArray()วิธีการใน Java:

String k = "abc";
char[] alpha = k.toCharArray();

สิ่งนี้ควรใช้งานได้ดีใน Java 8


3

แปลงเป็นพิมพ์Char?

http://www.javadb.com/convert-string-to-character-array


1
เหตุใดจึงลดลง ดูเหมือนจะเป็นวิธีแก้ปัญหาสำหรับสิ่งที่ถูกถาม (เท่าที่ฉันสามารถเข้าใจได้) ... แม้ว่าฉันคิดว่าคุณหมายถึงchar[]=)
Axel

2

คุณสามารถใช้ได้string.chars().mapToObj(e -> new String(new char[] {e}));แม้ว่าจะค่อนข้างยาวและใช้ได้กับ java 8 เท่านั้นต่อไปนี้เป็นวิธีการอื่น ๆ :

string.split(""); (Has an extra whitespace character at the beginning of the array if used before Java 8) string.split("|"); string.split("(?!^)"); Arrays.toString(string.toCharArray()).substring(1, string.length() * 3 + 1).split(", ");

อันสุดท้ายยาวโดยไม่จำเป็นมันก็เพื่อความสนุก!


2

วิธีการเพิ่มเติม:

ดังที่ได้กล่าวไปแล้วคุณสามารถแปลง "ชื่อ" สตริงเดิมเป็นอาร์เรย์ถ่านได้อย่างง่ายดาย:

String originalString = "name";
char[] charArray = originalString.toCharArray();

หากต้องการดำเนินการตามความคิดนี้ต่อไปคุณสามารถแปลงอาร์เรย์ char เป็นอาร์เรย์สตริง:

String[] stringArray = new String[charArray.length];
for (int i = 0; i < charArray.length; i++){
    stringArray[i] = String.valueOf(charArray[i]);
}

ณ จุดนี้ stringArray ของคุณจะเต็มไปด้วยค่าดั้งเดิมจากสตริงเดิมของคุณ "name" เช่นตอนนี้โทร

System.out.println(stringArray[0]);

จะคืนค่า "n" (เป็น String) ในกรณีนี้


2

แยกสตริงที่ว่างเปล่ากับString.split ()ส่งกลับอาร์เรย์องค์ประกอบเดียวที่มีสตริงที่ว่างเปล่า ในกรณีส่วนใหญ่คุณอาจต้องการที่จะได้รับอาร์เรย์ที่ว่างเปล่าหรือโมฆะถ้าคุณผ่านในโมฆะซึ่งเป็นสิ่งที่คุณได้รับกับorg.apache.commons.lang3.StringUtils.split (STR)

import org.apache.commons.lang3.StringUtils;

StringUtils.split(null)       => null
StringUtils.split("")         => []
StringUtils.split("abc def")  => ["abc", "def"]
StringUtils.split("abc  def") => ["abc", "def"]
StringUtils.split(" abc ")    => ["abc"]

อีกทางเลือกหนึ่งคือ google guava Splitter.split ()และSplitter.splitToList ()ซึ่งส่งคืนตัววนซ้ำและรายการที่สอดคล้องกัน ซึ่งแตกต่างจาก Apache เวอร์ชัน Splitter ที่จะเปิด NPE บนnull:

import com.google.common.base.Splitter;

Splitter SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();

SPLITTER.split("a,b,   c , , ,, ")     =>  [a, b, c]
SPLITTER.split("")                     =>  []
SPLITTER.split("  ")                   =>  []
SPLITTER.split(null)                   =>  NullPointerException

หากคุณต้องการรายการมากกว่า iterator แล้วใช้Splitter.splitToList ()


1
/**
 * <pre>
 * MyUtils.splitString2SingleAlphaArray(null, "") = null
 * MyUtils.splitString2SingleAlphaArray("momdad", "") = [m,o,m,d,a,d]
 * </pre>
 * @param str  the String to parse, may be null
 * @return an array of parsed Strings, {@code null} if null String input
 */
public static String[] splitString2SingleAlphaArray(String s){
    if (s == null )
        return null;
    char[] c = s.toCharArray();
    String[] sArray = new String[c.length];
    for (int i = 0; i < c.length; i++) {
        sArray[i] = String.valueOf(c[i]);
    }
    return sArray;
}

เมธอดString.splitจะสร้าง 1 ว่างคุณต้องลบออกจากอาร์เรย์ มันน่าเบื่อ.


1

ตามชื่อของคำถามนี้ฉันมาที่นี่เพื่อต้องการแปลง String เป็นอาร์เรย์ของสตริงย่อยหารด้วยตัวคั่น ฉันจะเพิ่มคำตอบที่นี่สำหรับคนอื่น ๆ ที่อาจมีคำถามเดียวกัน

สิ่งนี้ทำให้อาร์เรย์ของคำโดยการแยกสตริงในทุกช่องว่าง:

String str = "string to string array conversion in java";
String delimiter = " ";
String strArray[] = str.split(delimiter);

สิ่งนี้สร้างอาร์เรย์ต่อไปนี้:

// [string, to, string, array, conversion, in, java]

แหล่ง

ทดสอบใน Java 8


1

ที่นี่มีการแปลงสตริงธรรมดาเป็นสตริงอาร์เรย์โดยใช้วิธีแยก

String [] stringArray="My Name is ABC".split(" ");

เอาท์พุต

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.