我正在使用String.split()
来分割字符串。我收到的字符串有这样的结构:
[data]<US>[data]<US>
其中<US>
是ASCII单位分隔符(代码0x1F)。要拆分的代码是
String[] fields = someString.split(String.valueOf(0x1f));
除非[DATA]
是空字符串,否则这样可以正常工作。在这种情况下,数据就会被跳过。
我希望像[DATA]<US><US>[DATA]<US>
这样的字符串返回一个包含三个元素的数组:[DATA]
,null
和[DATA]
。
我该怎么做?
答案 0 :(得分:9)
如果您将split
与-1
作为第二个参数进行参数化,那么您将获得一个空String
,其中[data]
缺失(但不是{{1} }})。
null
来自docs 的解释
如果 n 是非正数,那么模式将被应用尽可能多次,并且数组可以具有任何长度。
..其中 n 是限制,即第二个参数。
答案 1 :(得分:0)
这是一个有效的代码
String s="[DATA]<US><US>[DATA]<US>";
String arr []= s.split("<US>");
for(String str :arr) {
if(str.equals("")) {
System.out.println("null");
} else {
System.out.println(str);
}
}
<强>输出:强>
[DATA]
null
[DATA]
根据您的要求更具体:
public String [] format(String s) {
String arr []= s.split("<US>");
for(int i=0;i<arr.length;i++)
{
if(arr[i].equals(""))
{
arr[i]=null;
}
}
return arr;
}
答案 2 :(得分:0)
之后你可以简单地遍历数组并将空字符串分配为null:
public class StringSplitting {
public static void main(String[] args){
String inputs = "[data]<US><US>[data]<US>";
String[] fields = inputs.split("<US>");
//set empty values to null
for(int i = 0; i < fields.length; i++){
if(fields[i].length() == 0){
fields[i] = null;
}
}
//print output
for(String e: fields){
if(e == null){
System.out.println("null");
}else{
System.out.println(e);
}
}
}
}