从后面开始提取3的子串Java
Extracting a substring of 3 starting from the back Java
我想从Node应用程序Java中的字符串后面提取长度为3的子字符串。所以如果我在一个字符串中有 12345678,我想在第一次提取中得到 678,在第二次提取中得到 345,在最后提取中得到 12。这只是一个示例,它应该适用于任意数量的数字(我将使用 parseInt() 进行转换)。提前致谢!
这就是我现在拥有的。
front=new IntNode(Integer.parseInt(digits.substring(digits.length()-3,digits.length())),null);
back=front;
for(int i=digits.length()-3;i>2;i-=2){
int sub=Integer.parseInt(digits.substring(i-3,i));
front.addNodeAfter(sub);
manyNodes++;
}
但是对于 12345678998765,它给了我 998,789,567,345,123,765
实际上,我认为模数运算符提供了一种更好的方法来做到这一点:
int value = 12345678;
while (value > 0) {
int last3 = value % 1000;
System.out.println(last3); // or console.log(last3) if using Node
value = value / 1000;
}
这会打印:
678
345
12
这里的逻辑是用1000的模%
求最后3位。然后,我们除以 1000 以去掉最后 3 位数字并再次迭代,直到没有数字剩余。
旁注:我实际上不知道您是否在这里使用 Java 的 Node,但上述逻辑在任何一种情况下都应该有效。
编辑:
如果由于某种原因您不能使用上述方法,可以使用 Java 中的 String#split
的技巧:
String number = "12345679801234567890";
String[] numbers = number.replaceAll("(\d{3})", ".").split("\.");
System.out.println(Arrays.toString(numbers));
这会打印:
[123, 456, 798, 012, 345, 678, 90]
看看你的 i 初始化,int i=digits.length()-3
你的 i 以 length - 3 开始,
所以如果你有 12345678998765
,你从数字 7 开始,
int sub=Integer.parseInt(digits.substring(i-3,i));
然后在这里你把子字符串 i - 3 取到 i,所以你在 7 后面的 3 个位置,这意味着 998。
IMO 你应该在另一个答案中使用模数方法,只是想解释为什么你的代码没有给你预期的结果
我想从Node应用程序Java中的字符串后面提取长度为3的子字符串。所以如果我在一个字符串中有 12345678,我想在第一次提取中得到 678,在第二次提取中得到 345,在最后提取中得到 12。这只是一个示例,它应该适用于任意数量的数字(我将使用 parseInt() 进行转换)。提前致谢! 这就是我现在拥有的。
front=new IntNode(Integer.parseInt(digits.substring(digits.length()-3,digits.length())),null);
back=front;
for(int i=digits.length()-3;i>2;i-=2){
int sub=Integer.parseInt(digits.substring(i-3,i));
front.addNodeAfter(sub);
manyNodes++;
}
但是对于 12345678998765,它给了我 998,789,567,345,123,765
实际上,我认为模数运算符提供了一种更好的方法来做到这一点:
int value = 12345678;
while (value > 0) {
int last3 = value % 1000;
System.out.println(last3); // or console.log(last3) if using Node
value = value / 1000;
}
这会打印:
678
345
12
这里的逻辑是用1000的模%
求最后3位。然后,我们除以 1000 以去掉最后 3 位数字并再次迭代,直到没有数字剩余。
旁注:我实际上不知道您是否在这里使用 Java 的 Node,但上述逻辑在任何一种情况下都应该有效。
编辑:
如果由于某种原因您不能使用上述方法,可以使用 Java 中的 String#split
的技巧:
String number = "12345679801234567890";
String[] numbers = number.replaceAll("(\d{3})", ".").split("\.");
System.out.println(Arrays.toString(numbers));
这会打印:
[123, 456, 798, 012, 345, 678, 90]
看看你的 i 初始化,int i=digits.length()-3
你的 i 以 length - 3 开始,
所以如果你有 12345678998765
,你从数字 7 开始,
int sub=Integer.parseInt(digits.substring(i-3,i));
然后在这里你把子字符串 i - 3 取到 i,所以你在 7 后面的 3 个位置,这意味着 998。
IMO 你应该在另一个答案中使用模数方法,只是想解释为什么你的代码没有给你预期的结果