【问题标题】:java convert string to int and remove trailing zerosjava将字符串转换为int并删除尾随零
【发布时间】:2015-05-22 13:29:02
【问题描述】:

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

任何帮助将不胜感激 提前致谢

【问题讨论】:

  • 在数组末尾开始迭代。删除零直到找到一个非零,此时你应该break循环
  • 如何将“001203”转换为3, 0.2?, 1, 0, 0这是一个错字吗?
  • 试着写一个这样的方法来修剪零:找到第一个非0,这是新字符串的开始,第二个值是最后出现的非0字符,之后你可以使用String。 subString(start, end) ;) 这样您就可以确保正确返回。你的方法是从字符串中删除每个 0。
  • @gtgaxiola 是的,这是一个错字

标签: java string arraylist int zero


【解决方案1】:

您的方法的问题在于,在您的内部循环中,无论其在列表中的位置如何,您都会删除零。

有多种方法可以实现您想要的。这是使用单个循环的一种方法(没有为您反转列表的字符串或集合操作):

    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);
        }
    }

其他几个选项:

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

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    试试这个代码:

    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);
    }
    

    【讨论】:

      【解决方案3】:

      下面是一个简短的示例,说明您想马上做的事情:

      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])));
      ...
      

      【讨论】:

        猜你喜欢
        • 2014-02-02
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2022-09-29
        • 2015-04-03
        • 2012-12-06
        • 1970-01-01
        相关资源
        最近更新 更多