gpt4 book ai didi

java - 奇怪的 Java 行为

转载 作者:行者123 更新时间:2023-12-01 10:11:34 27 4
gpt4 key购买 nike

我在运行时遇到了奇怪的 java 行为。所有信息都在屏幕截图中。我的应用程序失败了。令人惊讶的是,在不同时间使用相同的输入数据,它可以被正确处理。你能解释一下这种奇怪行为的原因是什么吗?我使用jdk 1.7.0_79这里是完整的代码部分id = "common.dto.IdsFilter"

    private String[] splitPackageAndNameParts(String id) {
// check string not empty
if (StringUtils.isEmpty(id)) {
throw new IllegalArgumentException("Unexpected id : " + id);
}

// get last point index
int index = id.lastIndexOf(".");

// check index
if (index == 0 || index >= (id.length() - 1)) {
throw new IllegalArgumentException("Unexpected id : " + id);
}

// split
String pkgPart = index < 0 ? "" : id.substring(0, index + 1);
String namePart = id.substring(index + 1, id.length());

// return result
return new String[]{pkgPart, namePart};
}

正确的结果应该是pkgPart = "common.dto." ,但在运行时它返回 "common.dto" (不带点)

enter image description here

最佳答案

据我所知,子字符串中似乎存在一个离一错误。您想要做的是封装句点索引点的位置,但不包括,因为这也会在子字符串中包含句点。

简单更改:从子字符串操作中删除 + 1

或者,在 Java 8 中,有一种更清晰的方法可以使用 StringJoiner 和 String#split 来执行此操作。这将为您提供第一个元素;第二个元素只是拆分集合中的最后一个元素。

String[] split = pkg.split("\\.");
final StringJoiner stringJoiner = new StringJoiner(".");
for(int i = 0; i < split.length - 1; i++) {
stringJoiner.add(split[i]);
}
System.out.println(stringJoiner.toString());

关于java - 奇怪的 Java 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com