java - String.split() 导致创建一个空字符串,我该如何防止这种情况?
问题描述
我有一个字符串,它是形式的较小字符串的串联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);
}
解决方案
您在数组的开头得到一个空字符串,因为您要拆分的字符串以您选择的分隔符 ( #
) 开头。您可以通过在拆分之前从头开始删除它来防止它(String.substring(int)
例如使用方法)。
示例解决方案:
String[] orders = orderList.substring(1).split("#");
推荐阅读
- php - Symfony 4 功能测试未正确加载(子)实体
- c++ - 如何在这个哈希图中实现一棵 AVL 树?
- swift - Swift 函数在它的 return 语句上产生一个“SIGILL”
- git - Jenkins 在构建之前将稳定分支合并到每个 PR
- networking - 如何将我的本地 TCP 端口公开?
- javascript - 数据表-当有空值时获取总数
- python - 消除连续数字
- python - 需要帮助解码注册表二进制数据
- redux - 使用 redux-promise 处理 redux 错误的正确方法
- android - 如何在 OnClickListener 上编辑 TextView