字符串到字符串数组的转换

我有一个 string = "name"; 我想转换成一个字符串数组。 我该怎么做? 有没有内置的 java 函数?手动我可以做到这一点,但我正在寻找一个 Java 内置的功能。

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

945401 次浏览

字符串数组 = 字符数组?

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

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

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的数组。

我想根本没有必要,因为它不会变得比

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 来删除第一个数组条目。

首先,String.split分割正则表达式上的字符串,这个表达式可能是一个空字符串:

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

返回数组:

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

删除第一个空白条目是留给读者的练习: -)

注意: 在 Java8中,不再包含空的第一个元素。

假设您确实需要一个单字符字符串数组(而不是 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);
}
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;
}
/**
* <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将生成空的第一个,你必须从数组中删除它。这很无聊。

您可以使用 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(", ");

最后一个不必要的长,只是为了好玩!

另一种方法:

如前所述,您可以非常容易地将原来的 String“ name”转换为 char 数组:

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

为了继续这个思路,你可以把字符数组转换成字符串数组:

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)。

Split ()拆分空字符串将返回 包含空字符串的单元素数组。在大多数情况下,您可能更喜欢获得一个空数组,或者如果传入 null,则获得 null,这正是 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 番石榴 Splitter.split ()Splitter.splitToList (),它们返回一个迭代器和一个相应的列表。与 apache 版本不同,Splitter 将在 null上抛出 NPE:

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 ()

在 java 8中,有一个方法可以做到这一点: toCharArray () :

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

结果产生以下数组:

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

基于这个问题的标题,我想把 String 转换成一个子字符串数组,除以某个分隔符。我将在这里为其他可能有同样问题的人补充这个答案。

这通过在每个空格处分割字符串来创建一个单词数组:

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

这将创建以下数组:

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

来源

在 Java8中测试

下面是使用拆分方法将简单的字符串转换为字符串数组。

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

输出

stringArray[0]="My";
stringArray[1]="Name";
stringArray[2]="is";
stringArray[3]="ABC";

只需在 Java 中使用 .toCharArray()方法:

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

这在 Java8中应该可以正常工作。