如何在 String.split() 中允许空字符串?
How to allow empty strings in String.split()?
我正在使用 String.split()
拆分字符串。我收到的字符串具有以下结构:
[data]<US>[data]<US>
其中 <US>
是 ASCII 单位分隔符(代码 0x1F)。要拆分的代码是
String[] fields = someString.split(String.valueOf(0x1f));
这很好用,除非 [DATA]
是一个空字符串。在这种情况下,数据将被跳过。
我想要一个像 [DATA]<US><US>[DATA]<US>
这样的字符串到 return 一个包含三个元素的数组:[DATA]
、null
和 [DATA]
。
我该怎么做?
如果您将 split
参数化为 -1
作为第二个参数,您将得到一个空的 String
,其中 [data]
缺失(但 null
).
someString.split(String.valueOf(0x1f), -1);
解释 来自docs
If n is non-positive then the pattern will be applied as many times as possible and the array can have any length.
.. 其中 n 是极限,即第二个参数。
这是一个工作代码
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;
}
之后您可以简单地遍历数组并将空字符串分配为 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);
}
}
}
}
我正在使用 String.split()
拆分字符串。我收到的字符串具有以下结构:
[data]<US>[data]<US>
其中 <US>
是 ASCII 单位分隔符(代码 0x1F)。要拆分的代码是
String[] fields = someString.split(String.valueOf(0x1f));
这很好用,除非 [DATA]
是一个空字符串。在这种情况下,数据将被跳过。
我想要一个像 [DATA]<US><US>[DATA]<US>
这样的字符串到 return 一个包含三个元素的数组:[DATA]
、null
和 [DATA]
。
我该怎么做?
如果您将 split
参数化为 -1
作为第二个参数,您将得到一个空的 String
,其中 [data]
缺失(但 null
).
someString.split(String.valueOf(0x1f), -1);
解释 来自docs
If n is non-positive then the pattern will be applied as many times as possible and the array can have any length.
.. 其中 n 是极限,即第二个参数。
这是一个工作代码
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;
}
之后您可以简单地遍历数组并将空字符串分配为 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);
}
}
}
}