Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java将字符串转换为int并删除尾随的零_Java_String_Arraylist_Int_Zero - Fatal编程技术网

java将字符串转换为int并删除尾随的零

java将字符串转换为int并删除尾随的零,java,string,arraylist,int,zero,Java,String,Arraylist,Int,Zero,大家好,我正在尝试将字符串反向转换为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 in

大家好,我正在尝试将字符串反向转换为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();
            }
        }

    }
公共转换(字符串nums){
List=新建ArrayList();//创建ArrayList
对于(int i=nums.length();i>=0;i--){//转换为int
int j=整数.parseInt(数字);
列表.添加(j);
对于(迭代器k=List.Iterator();k.hasNext();){//删除尾随的零
如果(k.next()等于(0)){
k、 删除();
}
}
}
此代码当前删除所有0,而不是尾随的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);
注意

另一个不使用
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 nums=“001203”;
列表=新的ArrayList();
//用于帮助检查前导零的布尔标志
//首先将其设置为true,即假设有前导零
布尔值checkLeadingZeres=true;
//在迭代过程中忽略前导零,
//并按相反顺序追加到列表中
对于(int i=0;i
其他几个选项:

  • 更改内部循环,以便在列表上向后迭代,并删除零,直到找到非零值

  • 首先修剪所有前导零(例如使用正则表达式操作或循环),然后向后循环以创建列表


  • 希望有帮助。

    在数组末尾开始迭代。删除零,直到找到非零,此时应
    中断
    循环方式为“001203”转换为
    3,0.2?,1,0,0
    这是一个打字错误吗?试着写一个方法,像这样修剪零:找到第一个非0字符,这是新字符串的开始,第二个值是非0字符的最后一次出现,然后可以使用string.subString(start,end);)这样您将确保正确返回。您的方法是从字符串中删除每一个0。@gtgaxiola是的,这是一个输入错误
    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 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);
            }
        }