首页 > 解决方案 > String.split() 导致创建一个空字符串,我该如何防止这种情况?

问题描述

我有一个字符串,它是形式的较小字符串的串联refNum orderNum,例如在包含参考编号和订单上的项目数量的字符串中BRICK1 10。较大的连接字符串是这些较小的字符串拼凑在一起的数量,并使用井号将它们分开,例如#BRICK1 10#BRICK2 20#BRICK3 30

当我使用 String.split() 时,我希望结果是一个数组,它将较大的字符串分成较小的元素,所以,BRICK1 10但是,当我实际尝试使用“#”作为分隔符拆分字符串时,我得到数组开头的第四个字符串为空。BRICK2 20BRICK3 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);
    }

标签: java

解决方案


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

示例解决方案:

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

推荐阅读