chuyển đổi chuỗi thành chuỗi trong java


115

Tôi có một string = "name"; Tôi muốn chuyển đổi thành một mảng chuỗi. Tôi phải làm nó như thế nào? Có chức năng java nào được tích hợp sẵn không? Tôi có thể làm điều đó theo cách thủ công nhưng tôi đang tìm kiếm một hàm tích hợp sẵn trong java.

Tôi muốn một mảng mà mỗi ký tự của chuỗi sẽ là một chuỗi. như char 'n' bây giờ sẽ là chuỗi "n" được lưu trữ trong một mảng.


10
Tôi đoán bạn không có nghĩa là String[] ary = new String[] { "name" };, bạn cần thao tác gì? tách trong các ký tự chẳng hạn?
rsp

Ý bạn là một mảng chuỗi? Làm thế nào bạn có thể có một hàm cho điều đó, nó sẽ chỉ là: String [] array = {"Name"}; hay ý bạn là một mảng ký tự?
Woody

1
tôi muốn một mảng mà mỗi ký tự của chuỗi sẽ là một chuỗi. như char 'n' sẽ hiện chuỗi "n" được lưu trữ trong một mảng
riyana

Câu trả lời:


199

Để bắt đầu bài tập của bạn, hãy String.splittách các chuỗi trên một biểu thức chính quy và biểu thức này có thể là một chuỗi trống:

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

Mang lại mảng:

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

Loại bỏ mục đầu tiên trống được để lại như một bài tập cho người đọc :-)

Lưu ý: Trong Java 8, phần tử đầu tiên trống không còn được bao gồm.


21
Lưu ý: Sử dụng jdk8, mục đầu tiên trống không được đưa vào mảng kết quả nữa. Xem stackoverflow.com/questions/22718744/…
Alexis C.

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

Dòng thứ hai phân bổ một mảng Chuỗi có độ dài là 1. Lưu ý rằng bạn không cần phải tự chỉ định độ dài, chẳng hạn như:

String[] strArray = new String[1];

thay vào đó, độ dài được xác định bởi số phần tử trong initalizer. Sử dụng

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

tạo một mảng có độ dài là 3.


22
Không thực sự trả lời câu hỏi.
atamanroman

1
Kiểm tra lịch sử sửa đổi của câu hỏi và bạn sẽ thấy rằng câu hỏi đang yêu cầu điều gì đó khác trước khi nó được chỉnh sửa. Câu trả lời này trả lời cho phiên bản đầu tiên.
f1sh

14

Giả sử bạn thực sự muốn một mảng các chuỗi ký tự đơn (không phải là char[]hoặcCharacter[] )

1. Sử dụng regex:

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

Phần đầu tìm kiếm phủ định có độ rộng bằng 0 ngăn đối sánh mẫu ở đầu đầu vào, vì vậy bạn không nhận được chuỗi trống ở đầu.

2. Sử dụng Ổi :

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 đó là IMO tốt nhất. Hãy lưu ý rằng Java 8 đã khắc phục sự cố cụ thể đó.
shkschneider

13

Tôi đoán đơn giản là không cần nó, vì nó sẽ không đơn giản hơn

String[] array = {"name"};

Tất nhiên nếu bạn nhấn mạnh, bạn có thể viết:

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

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

[Chỉnh sửa] Nếu bạn muốn Chuỗi một chữ cái, bạn có thể sử dụng:

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

Thật không may s [0] sẽ trống, nhưng sau đó các chữ cái n, a, m, e sẽ theo sau. Nếu đây là vấn đề, bạn có thể sử dụng ví dụ: System.arrayCopy để loại bỏ mục nhập mảng đầu tiên.


tôi muốn một mảng mà mỗi ký tự của chuỗi sẽ là một chuỗi. như char 'n' sẽ hiện chuỗi "n" được lưu trữ trong một mảng
riyana

@Landei Tôi có String date = "2013/01/05" và khi tôi sử dụng .split ("/"), nó không trả về chuỗi trống là [0] và nó hoạt động tốt. Có sự khác biệt nào giữa bộ tách biểu thức chính quy của tôi và của bạn không?
Behzad

@Behzad AFAIK, bạn có một hành vi buồn cười với mục nhập trống chỉ dành cho các mẫu trống, không phải bạn có một số dấu phân cách.
Landei

@Landei Hãy cho tôi biết rằng tôi hiểu ý bạn. Ý bạn là chỉ sử dụng "" trong hàm phân tách trả về 0 làm giá trị mảng đầu tiên? Đúng?
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

Trong java 8, có một phương thức mà bạn có thể thực hiện việc này: toCharArray ():

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

Điều này dẫn đến mảng sau:

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

Mặc dù không phải là một mảng chuỗi, nhưng điều này là hoàn hảo cho các trường hợp bạn cần các ký tự thay vì truy cập ngớ ngẩn String.charAt(0)vào các chuỗi ký tự đơn lẻ một cách không cần thiết! ;)
varun

Bạn cứu mạng tôi @fonji
Amit Sharma

5

Mảng chuỗi = mảng ký tự?

Hoặc bạn có một chuỗi có nhiều từ, mỗi từ phải là một phần tử mảng?

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


tôi muốn một mảng mà mỗi ký tự của chuỗi sẽ là một chuỗi. như char 'n' sẽ hiện chuỗi "n" được lưu trữ trong một mảng
riyana

4

Chỉ cần sử dụng .toCharArray()phương thức trong Java:

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

Điều này sẽ hoạt động tốt trong Java 8.


3

Chuyển đổi nó thành loại Char?

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


1
Tại sao điều này bị phản đối? Nó loại trông giống như một giải pháp cho những gì đã được yêu cầu (đối với càng nhiều như tôi có thể hiểu được nó anyway) ... Mặc dù tôi nghĩ rằng bạn có nghĩa là char[]=)
Axel

2

Bạn có thể sử dụng string.chars().mapToObj(e -> new String(new char[] {e}));, mặc dù điều này khá dài và chỉ hoạt động với java 8. Dưới đây là một số phương pháp khác:

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(", ");

Cái cuối cùng dài không cần thiết, nó chỉ để cho vui!


2

Một phương pháp bổ sung:

Như đã được đề cập, bạn có thể chuyển đổi "tên" Chuỗi ban đầu thành mảng char khá dễ dàng:

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

Để tiếp tục quá trình suy nghĩ này, sau đó bạn có thể chuyển đổi mảng char thành mảng Chuỗi:

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

Tại thời điểm này, stringArray của bạn sẽ được lấp đầy với các giá trị ban đầu từ "tên" chuỗi ban đầu của bạn. Ví dụ: hiện đang gọi

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

Sẽ trả về giá trị "n" (dưới dạng một Chuỗi) trong trường hợp này.


2

Tách một chuỗi rỗng bằng String.split () trả về một mảng phần tử đơn chứa một chuỗi rỗng . Trong hầu hết các trường hợp, bạn có thể thích nhận một mảng trống hoặc null nếu bạn chuyển vào một giá trị rỗng, đó chính xác là những gì bạn nhận được với 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"]

Một tùy chọn khác là Google ổi Splitter.split ()Splitter.splitToList () trả về một trình lặp và một danh sách tương ứng. Không giống như phiên bản apache, Splitter sẽ ném một NPE vào 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

Nếu bạn muốn có một danh sách hơn là một trình lặp thì hãy sử dụng 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;
}

Phương thức String.splitsẽ tạo ra đầu tiên trống, bạn phải xóa nó khỏi mảng. Thật là nhàm chán.


1

Dựa trên tiêu đề của câu hỏi này, tôi đến đây muốn chuyển đổi một Chuỗi thành một mảng các chuỗi con được chia cho một số dấu phân cách. Tôi sẽ thêm câu trả lời đó ở đây cho những người khác có thể có cùng câu hỏi.

Điều này tạo ra một mảng các từ bằng cách tách chuỗi ở mọi khoảng trắng:

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

Điều này tạo ra mảng sau:

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

Nguồn

Đã thử nghiệm trong Java 8


1

ở đây có chuyển đổi chuỗi đơn giản thành chuỗi chuỗi bằng cách sử dụng phương pháp phân tách.

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

Đầu ra

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.