JavaFX字符串转ObservableArrayList时逗号后空格异常问题求助
解决JavaFX ObservableArrayList转换时保留原字符串空格的问题
你的问题核心在于混淆了ObservableArrayList默认的toString()输出和列表中元素的实际内容。现有代码中使用split(",")分割字符串后,元素本身是保留了原有的空格格式的,但ObservableArrayList的默认toString()方法会自动在元素之间添加, (逗号加空格),导致你看到的输出和原字符串格式不一致,但实际元素内容是正确的。
情况1:确认元素实际保留了空格
如果你只是被toString()的输出误导,实际元素内容才是关键,可以通过遍历列表打印元素的具体内容来验证:
tableList.forEach(item -> { List<String> elements = Arrays.stream(item.replace("[", "").replace("]", "").split(",")) .toList(); // 打印每个元素的内容和长度,验证空格是否保留 elements.forEach(elem -> System.out.printf("元素内容:'%s',长度:%d%n", elem, elem.length())); data.add(FXCollections.observableArrayList(elements)); });
运行这段代码你会发现,Backupserver没有前导空格, 500和 250的前导两个空格都被正确保留了。
情况2:需要生成与原格式一致的字符串
如果你的其他代码需要将列表转回原格式的字符串,不要依赖ObservableArrayList的toString(),而是手动拼接:
// 假设list是你的ObservableArrayList实例 String originalFormat = "[" + String.join(",", list) + "]"; // 此时originalFormat会和原字符串格式完全一致:[srv3,Backupserver, 500, 250]
优化现有代码
你可以简化现有代码的字符串处理逻辑,避免多次调用replace:
tableList.forEach(item -> { String content = item.substring(1, item.length() - 1); // 直接截取去掉首尾的[] data.add(FXCollections.observableArrayList(Arrays.stream(content.split(",")) .toList())); });
这段代码和原代码效果一致,但执行效率更高。
内容的提问来源于stack exchange,提问作者Doom-Git
相关产品推荐
相关产品推荐

