java 将字符串转换为 int 并删除尾随零
java convert string to int and remove trailing zeros
大家好,我目前正在尝试将字符串反向转换为 arrayList,然后删除所有尾随零
例如“001203”转换为 (3,0.2,1,0,0) 然后 (3,0,2,1)
我的代码目前是
public convert(String nums) {
List = new ArrayList<Integer>(); // create arraylist
for (int i = nums.length(); i >= 0; i--) { //convert to int
int j = Integer.parseInt(digits);
List .add(j);
for (Iterator<Integer> k = List .iterator(); k.hasNext();) { //remove trailing zeros
if (k.next().equals(0)) {
k.remove();
}
}
}
此代码目前删除所有 0 而不是尾随零。意思是我的输出是 (3,2,1) 而不是 (3,0,2,1);
任何帮助将不胜感激
提前致谢
以下是您近期要执行的操作的简单示例:
String example = "001203";
// Replacing all leading 0s with empty, converting to char array
char[] chars = example.replaceAll("^0+", "").toCharArray();
// creating list of integers
List<Integer> list = new ArrayList<Integer>();
// iterating chars
for (char c: chars) {
// trying to convert to integer
try {
list.add(Integer.parseInt(Character.toString(c)));
}
catch (NumberFormatException nfe) {
// TODO handle non-numeric characters!
}
}
// reversing list
Collections.reverse(list);
// printing list
System.out.println(list);
输出
[3, 0, 2, 1]
备注
不使用 Collections.reverse
的另一种选择是在 char[]
:
结束时开始迭代
for (int i = chars.length - 1; i > -1; i--) {
try {
list.add(Integer.parseInt(Character.toString(chars[i])));
...
试试这个代码:
public static void main(String[] args) {
String numStr = "001203";
String revNumStr = new StringBuilder(numStr).reverse().toString();
int lastZeroIndex = revNumStr.lastIndexOf('0');
if(lastZeroIndex == revNumStr.length() - 1) {
String newStr = "";
boolean done = false;
for(int i = (revNumStr.length() - 1) ; i >= 0 ; i --) {
if(revNumStr.charAt(i) != '0') {
done = true;
}
if(done) {
newStr += revNumStr.charAt(i);
}
}
revNumStr = new StringBuilder(newStr).reverse().toString();
}
System.out.println("The revrese string is : " + revNumStr);
}
您的方法的问题在于,在您的内部循环中,无论其在列表中的位置如何,您都在删除零。
有多种方法可以实现您想要的效果。这是一种使用单个循环的方法(没有为您反转列表的 String 或 Collections 操作):
String nums = "001203";
List<Integer> list = new ArrayList<>();
// a boolean flag to help check for leading zeroes
// set it to true first i.e. assume there are leading zeroes
boolean checkLeadingZeroes = true;
// Ignore leading zeroes during iteration,
// and append to list in reverse order
for (int i=0; i < nums.length(); i++){
int n = Integer.parseInt(nums.charAt(i)+"");
// only check for leading zeroes if flag is true
if (checkLeadingZeroes){
// If flag is set to false here, you've found the first non-zero
checkLeadingZeroes = (n == 0);
}
if (!checkLeadingZeroes) {
/* If flag is false, n is not a leading zero
* Add n to the beginning of your list (index 0)
*/
list.add(0, n);
}
}
其他几个选项:
更改您的内部循环,以便您在列表中向后迭代,并删除零,直到找到非零值
Trim 首先是所有前导零(例如使用正则表达式操作或循环),然后向后循环以创建您的列表。
希望对您有所帮助。
大家好,我目前正在尝试将字符串反向转换为 arrayList,然后删除所有尾随零 例如“001203”转换为 (3,0.2,1,0,0) 然后 (3,0,2,1)
我的代码目前是
public convert(String nums) {
List = new ArrayList<Integer>(); // create arraylist
for (int i = nums.length(); i >= 0; i--) { //convert to int
int j = Integer.parseInt(digits);
List .add(j);
for (Iterator<Integer> k = List .iterator(); k.hasNext();) { //remove trailing zeros
if (k.next().equals(0)) {
k.remove();
}
}
}
此代码目前删除所有 0 而不是尾随零。意思是我的输出是 (3,2,1) 而不是 (3,0,2,1);
任何帮助将不胜感激 提前致谢
以下是您近期要执行的操作的简单示例:
String example = "001203";
// Replacing all leading 0s with empty, converting to char array
char[] chars = example.replaceAll("^0+", "").toCharArray();
// creating list of integers
List<Integer> list = new ArrayList<Integer>();
// iterating chars
for (char c: chars) {
// trying to convert to integer
try {
list.add(Integer.parseInt(Character.toString(c)));
}
catch (NumberFormatException nfe) {
// TODO handle non-numeric characters!
}
}
// reversing list
Collections.reverse(list);
// printing list
System.out.println(list);
输出
[3, 0, 2, 1]
备注
不使用 Collections.reverse
的另一种选择是在 char[]
:
for (int i = chars.length - 1; i > -1; i--) {
try {
list.add(Integer.parseInt(Character.toString(chars[i])));
...
试试这个代码:
public static void main(String[] args) {
String numStr = "001203";
String revNumStr = new StringBuilder(numStr).reverse().toString();
int lastZeroIndex = revNumStr.lastIndexOf('0');
if(lastZeroIndex == revNumStr.length() - 1) {
String newStr = "";
boolean done = false;
for(int i = (revNumStr.length() - 1) ; i >= 0 ; i --) {
if(revNumStr.charAt(i) != '0') {
done = true;
}
if(done) {
newStr += revNumStr.charAt(i);
}
}
revNumStr = new StringBuilder(newStr).reverse().toString();
}
System.out.println("The revrese string is : " + revNumStr);
}
您的方法的问题在于,在您的内部循环中,无论其在列表中的位置如何,您都在删除零。
有多种方法可以实现您想要的效果。这是一种使用单个循环的方法(没有为您反转列表的 String 或 Collections 操作):
String nums = "001203";
List<Integer> list = new ArrayList<>();
// a boolean flag to help check for leading zeroes
// set it to true first i.e. assume there are leading zeroes
boolean checkLeadingZeroes = true;
// Ignore leading zeroes during iteration,
// and append to list in reverse order
for (int i=0; i < nums.length(); i++){
int n = Integer.parseInt(nums.charAt(i)+"");
// only check for leading zeroes if flag is true
if (checkLeadingZeroes){
// If flag is set to false here, you've found the first non-zero
checkLeadingZeroes = (n == 0);
}
if (!checkLeadingZeroes) {
/* If flag is false, n is not a leading zero
* Add n to the beginning of your list (index 0)
*/
list.add(0, n);
}
}
其他几个选项:
更改您的内部循环,以便您在列表中向后迭代,并删除零,直到找到非零值
Trim 首先是所有前导零(例如使用正则表达式操作或循环),然后向后循环以创建您的列表。
希望对您有所帮助。