在java中string到数组的转换
我有一个string="name";
我想转换成一个string数组。 我该怎么做? 有没有build立在function的Java? 手动我可以做到这一点,但我正在寻找一个functionbuild立的Java。
我想要一个数组,其中string的每个字符将是一个string。 像char'n'现在将存储在数组中的string“n”。
为了开始你的任务, String.split
在正则expression式上分割string,这个expression式可能是一个空string:
String[] ary = "abc".split("");
产生数组:
(java.lang.String[]) [, a, b, c]
摆脱空的第一个条目留给读者的练习:-)
注意:在Java 8中,不再包含空的第一个元素。
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"};
创build一个长度为3的数组。
假设你真的想要一个单字符数组(不是char[]
或Character[]
)
1.使用正则expression式:
public static String[] singleChars(String s) { return s.split("(?!^)"); }
零宽度的负向预测可以防止input开始时的模式匹配,所以你不会得到一个前导的空string。
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[] array = {"name"};
当然,如果你坚持,你可以写:
static String[] convert(String... array) { return array; } String[] array = convert("name","age","hobby");
[编辑]如果你想要单字母string,你可以使用:
String[] s = "name".split("");
不幸的是,s [0]将是空的,但在这之后,字母n,a,m,e将会跟随。 如果这是一个问题,你可以使用例如System.arrayCopy来摆脱第一个数组入口。
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; }
在java 8中,有一个方法可以做到这一点:toCharArray():
String k = "abcdef"; char[] x = k.toCharArray();
这导致以下数组:
[a,b,c,d,e,f]
string数组=字符数组?
或者你有一个多字的string,每个字符都应该是一个数组元素?
String[] array = yourString.split(wordSeparator);
把它转换成Char
types?
在java中简单使用.tocharArray()方法
String k = "abc"; char alpha = k.tocharArray();
这应该在JAVA 8中工作得很好
另一种方法:
正如已经提到的,你可以很容易地将原来的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将被填充你的原始string“name”的原始值。 例如,现在打电话
System.out.println(stringArray[0]);
在这种情况下,将返回值“n”(作为一个string)。
/** * <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(""); (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转换成由一些分隔符分割的子串的数组。 我会在这里为那些可能有同样问题的人添加这个答案。
这通过在每个空间处分割string来形成一组单词:
String str = "string to string array conversion in java"; String delimiter = " "; String strArray[] = str.split(delimiter);
这将创build以下数组:
// [string, to, string, array, conversion, in, java]
资源
在Java 8testing
这里有使用拆分方法将简单的string转换为string数组。
String [] stringArray="My Name is ABC".split(" ");
产量
stringArray[0]="My"; stringArray[1]="Name"; stringArray[2]="is"; stringArray[3]="ABC";
用String.split()分割一个空string将返回一个包含空string的单个元素数组 。 在大多数情况下,你可能会喜欢得到一个空的数组,或者如果你传入一个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"]
另一个选项是谷歌guava 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()的味道。