在Java中将字符串转换为字符串数组


115

我有一个string = "name"; 我想转换为字符串数组。我该怎么做?有内置的Java函数吗?可以手动完成,但是我正在搜索Java内置函数。

我想要一个数组,其中字符串的每个字符都是一个字符串。像char'n'现在将是存储在数组中的字符串“ n”。


10
我想你不是说String[] ary = new String[] { "name" };,你需要什么操作?例如拆分字符?
rsp 2010年

你是说一个字符串数组吗?您怎么可能有一个函数,它就是:String [] array = {“ Name”}; 还是你是一个字符数组?
伍迪

1
我想要一个数组,其中字符串的每个字符都是一个字符串。像
char'n

Answers:


199

要开始您的作业,请String.split在正则表达式上拆分字符串,并且该表达式可以是空字符串:

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

产生数组:

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

留空的第一条目留给读者练习:-)

注意:在Java 8中,不再包含空的first元素。


21
注意:使用jdk8,空的第一个条目不再包含在结果数组中。见stackoverflow.com/questions/22718744/...
亚历克西斯C.

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

第二行分配长度为1的String数组。请注意,您不需要自己指定长度,例如:

String[] strArray = new String[1];

取而代之的是,长度取决于初始化器中元素的数量。使用

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

创建一个长度为3的数组。


22
并不能真正回答问题。
atamanroman 2010年

1
查看问题的修订历史记录,您将看到问题在编辑之前要求其他内容。此答案答复第一个版本。
2013年

14

假设您确实想要一个单字符字符串数组(不是a char[]Character[]

1.使用正则表达式:

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

零宽度负前瞻可防止在输入开始时进行模式匹配,因此不会出现前导空字符串。

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
该正则表达式是最好的IMO。请注意,Java 8还是解决了该特定问题。
shkschneider 2014年

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

@Landei我有这个字符串date =“ 2013/01/05”,当我使用.split(“ /”)时,它不返回空字符串[0]并且工作正常。我的正则表达式分隔符和您的正则表达式分隔符之间有什么区别吗?
Behzad

@Behzad AFAIK您有一个有趣的行为,即只有空模式才有空条目,而没有一些定界符。
兰代

@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 19'Aug

你救了我的命@fonji
阿米特·夏尔马

5

字符串数组=字符数组?

还是您有一个包含多个单词的字符串,每个单词应该是一个数组元素?

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


我想要一个数组,其中字符串的每个字符都是一个字符串。像
char'n



2

您可以使用string.chars().mapToObj(e -> new String(new char[] {e}));,尽管这很长,并且仅适用于Java8。以下是一些其他方法:

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“ name”转换为char数组:

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

要继续这种思路,您可以将char数组转换为String数组:

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”(作为字符串)。


2

使用String.split()拆分空字符串将返回包含空字符串单个元素数组。在大多数情况下,您可能更希望获得一个空数组,或者如果您传递一个null则返回一个null,这正是您通过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"]

谷歌番石榴的另一个选择是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

如果要列表而不是迭代器,请使用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将生成空的1st,您必须将其从数组中删除。这很无聊。


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

这是使用split方法将简单字符串转换为字符串数组。

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

输出量

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.