为了账号安全,请及时绑定邮箱和手机立即绑定

String.split()导致创建一个空字符串,如何防止这种情况?

String.split()导致创建一个空字符串,如何防止这种情况?

人到中年有点甜 2021-05-06 09:19:34
我有一个字符串,该字符串是较小形式字符串的串联refNum orderNum,例如,包含参考号和订单上项目数量的字符串BRICK1 10。较大的串联字符串是将这些较小的字符串拼凑在一起并使用井号将它们分开的数量,例如#BRICK1 10#BRICK2 20#BRICK3 30。当我使用String.split()时,我希望结果是一个将较大的字符串划分为较小的元素的数组,因此BRICK1 10,BRICK2 20和BRICK3 30,但是当我实际上尝试使用“#”作为分隔符来拆分字符串时,我得到了数组开头的第四个字符串为空。我不确定为什么会发生这种情况,如何预防呢?我的长字符串是使用这种方法产生的public String getAllOrders()    {        String orderDetails = "";        for(BrickOrder o : orderList)        {            String order = "#" + o.getReferenceNumber() + " " + o.getNumberOfBricks();            System.out.println("ORDER: " + order);            orderDetails = orderDetails.concat(order);        }        return orderDetails;    }虽然在测试类中使用了split方法,但在这里。@Test    public void testFullOrderListReturnedCorrectly()    {        sys.createOrder(10);        sys.createOrder(100);        sys.createOrder(1000); //Create three orders        String orderList = sys.getOrders(); //Return full order list        System.out.println(orderList);        String[] orders = orderList.split("#");        System.out.println(orders.length);    }
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

就是split那样 它使用定界符对字符串进行分割,并且即使不是空字符串(即使不是最后一个字符串),也保留字符串(即使为空)(排除空字符串)。但是在这种情况下,我建议您orderList在分割之前先检查一下您的内容,#如果它是第一个字符,则将其删除:


String[] orders;

if (orderList.charAt(0) == '#') {

    orders = orderList.substring(1).split("#");

} else {

    orders = orderList.split("#");

}


查看完整回答
反对 回复 2021-05-19
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

因为要拆分的字符串以您选择的定界符(#)开始,所以在数组的开头会得到一个空字符串。您可以通过在拆分之前从一开始将其删除(String.substring(int)例如使用方法)来防止它。

解决方案示例:

String[] orders = orderList.substring(1).split("#");


查看完整回答
反对 回复 2021-05-19
?
忽然笑

TA贡献1806条经验 获得超5个赞

我认为问题是由于您要在订单字符串的开头附加“#”。

拆分的工作方式是,它将在每个“#”处断开订单字符串,并在订单字符串的开头立即遇到第一个“#”,因此该字段为空。

根据您的要求,您可以避免在开始时添加此“#”,或者在吐出之前删除“#”,或者忽略分散数组的元素。

希望这可以澄清。


查看完整回答
反对 回复 2021-05-19
  • 3 回答
  • 0 关注
  • 408 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信