【问题标题】:Remove one blank cell before every filled cell in a string array在字符串数组中的每个填充单元格之前删除一个空白单元格
【发布时间】:2013-07-22 09:40:44
【问题描述】:

我正在使用此代码:

ArrayList<String> getques = db.getSolutionData(levelno, level);
    String str = getques.get(0);            
    stringarr = str.split("");
System.out.println(Arrays.toString(stringarr));

这是结果输出:

07-23 16:10:37.031: I/System.out(2548): [, C, , , D, , , F, , I, , , , A, , F, , A, , , , , , , , , , , B, , C, , D, , , H, , , , , , C, , I, , G, , , A, , , E, , , B, , I, , , , , F, , G, , , H, , , A, , , E, , D, , I, , , , , , F, , , I, , G, , E, , , , , , , , , , , D, , B, , A, , , , H, , B, , , G, , , F]

现在我想在每个已填充的单元格之前删除一个空白单元格。 例如:在第二个单元格之前有一个我要删除的空白单元格,,D, 之前有 2 个空白单元格,所以我想从中删除一个,I 之前的一个空白单元格,A 之前的一个空白单元格, 3 个空白单元格,所以我想删除其中一个,等等。 因此我得出的结论是,我想在每个填充单元格之前删除一个空白单元格。

我用过:

ArrayList<String> list = new ArrayList<String>();
    for (String s : stringarr)
        if (!s.equals(""))
            list.add(s);
    stringarr = list.toArray(new String[list.size()]);

但它会删除所有空白单元格。请帮助,提前谢谢

【问题讨论】:

    标签: java android string split substring


    【解决方案1】:
      List<String> list=new ArrayList<>();
       for (String i:str){
           if(!i.equals("")){
               list.add("");
               list.add(i);
           }
       }    
    
    stringarr = list.toArray(new String[list.size()]);
    

    试试看是否可行。

    【讨论】:

    • [, C, , , , , , D, , , , , , F, , , ,I, , , , , , , ,A, , , ,F, , , ,A, , , , , , , , , , , , , , , , , , , , , , B, , , , C, , , , D, , , , , , H, , , , , , , , , , , , C, , , , I, , , , G, , , , , , A, , , , , , E, , , , , , B, , , , I, , , , , , , , , , F, , , , G, , , , , , H, , , , , , A, , , , , , E, , , , D, , , , I, , , , , , , , , , , , F, , , , , , 我, , , , G, , , , E, , , , , , , , , , , , , , , , , , , , , , D, , , , B, , , , A, , , , , , , , H, , , , B, , , , , , G, , , , , , F]
    • 你得到相同的输出吗?
    • 实际上它是增加空白单元格而不是减少它们......上面的评论是输出
    • 好的..我会再次检查,如果我得到它会给你解决方案。
    【解决方案2】:

    你可以试试这样的

     String[] str=new String[]{"","C","","","","D"};
       List<String> list=new ArrayList<>();
       for (String i:str){
           if(!i.equals("")){
               list.add("");
               list.add(i);
           }
       }
    

    【讨论】:

      【解决方案3】:
      ArrayList<String> list = new ArrayList<String>();
      boolean emptyCellRemoved = false;
      for (String s : stringarr) {
          if ("".equals(s)) {
              if (emptyCellRemoved == false) {
                  emptyCellRemoved = true;
              } else {
                  list.add(s);
              }
          } else {
              emptyCellRemoved = false;
              list.add(s);
          }
      }
      stringarr = list.toArray(new String[list.size()]);
      

      【讨论】:

      • 这不会删除第一个空白单元格
      • 会的。 emptyCellRemoved 为 false,因此将删除第一个空单元格。
      【解决方案4】:

      试试这个:)

      boolean oneRemoved = false;
      ArrayList<String> list = new ArrayList<String>();
          for (String s : stringarr){
      
              if (s.equals("") && !oneRemoved){               
                  oneRemoved = true;
              } else {
                  list.add(s);
                  if (!s.equals("")){
                     oneRemoved = false;
                  } 
              }
      
          }
          stringarr = list.toArray(new String[list.size()]);
      

      【讨论】:

        【解决方案5】:
        // original array
                List<String> list = Arrays.asList(stringarr);
                // modified array
                List<String> l = new ArrayList<String>();
        //      insertion index
                int index = 0;
                for(int i =0 ; i< list.size() ;i++){
                    if(!list.get(i).equals(" ") && !list.get(i).equals("")){
                        index++;
                        //remove extra empty space from end of modified array
                        if(l.size() > 1){
                            l.remove(i - index);
                        }
                    }
                    //make sure that first index not empty
                    if(i - index == -1 ) {
                        index--;
                    }
                    l.add(i - index, list.get(i));
        
        
                }
                System.out.println(Arrays.asList(list));
                System.out.println(Arrays.asList(l));
        

        结果会是这样的:

        [[ C,  ,  ,  D,  ,  ,  F,  ,  I,  ,  ,  ,  A,  ,  F,  ,  A,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  B,  ,  C,  ,  D,  ,  ,  H,  ,  ,  ,  ,  ,  C,  ,  I,  ,  G,  ,  ,  A,  ,  ,  E,  ,  ,  B,  ,  I,  ,  ,  ,  ,  F,  ,  G,  ,  ,  H,  ,  ,  A,  ,  ,  E,  ,  D,  ,  I,  ,  ,  ,  ,  ,  F,  ,  ,  I,  ,  G,  ,  E,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  D,  ,  B,  ,  A,  ,  ,  ,  H,  ,  B,  ,  ,  G,  ,  ,  F]]
        [[ C,  ,  D,  ,  F,  I,  ,  ,  A,  F,  A,  ,  ,  ,  ,  ,  ,  ,  ,  ,  B,  C,  D,  ,  H,  ,  ,  ,  ,  C,  I,  G,  ,  A,  ,  E,  ,  B,  I,  ,  ,  ,  F,  G,  ,  H,  ,  A,  ,  E,  D,  I,  ,  ,  ,  ,  F,  ,  I,  G,  E,  ,  ,  ,  ,  ,  ,  ,  ,  ,  D,  B,  A,  ,  ,  H,  B,  ,  G,  ,  F]]
        

        确保它是空白或空格单元格:

        if(!list.get(i).equals(" ") && !list.get(i).equals("")){
        

        我认为这会很好。

        【讨论】:

        • 这太复杂了,如果我们有两个没有空格的字母,恕我直言。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 2017-01-11
        • 2019-06-11
        • 2019-10-01
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多