【问题标题】:Run a for loop until the String Condition in JAVA运行 for 循环,直到 JAVA 中的字符串条件
【发布时间】:2014-01-13 20:54:45
【问题描述】:

如果我有一个字符串数组如下。

 String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Raman", " ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "};

我想复制从“H ----”到“----”之间的所有内容。也就是说它应该是“SinghSawhRaman”(不包括“H ----”和“----”。

类似这样的:

String keywords = "";
int j = 0;
for(int i = 0; i < name.length; i++){
 if(name[i].contains("H ---- ")){
   for(j = i; j < 5; j++){       
    // There problem is j < 5. I want to give a condition when name[i].contains(" ---- ") 
    // but not sure how should I be able to do it.
   keywords = keywords + name[j];
  }

有人可以告诉我最好的方法吗?

【问题讨论】:

    标签: java string for-loop


    【解决方案1】:
      for(j = i; !name[j].contains(" ---- "); j++){   
          keywords = keywords + name[j];
      }
    

    这应该对你有用,你可以将 for 循环的中断条件设置为任何布尔表达式。

    编辑:当条件为假时,需要! 作为循环中断。

    【讨论】:

      【解决方案2】:

      您使用contains 代替equals 的任何原因?

      如果您也可以使用equals,您可以使用List

      String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Raman", " ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "};
      List<String> s = Arrays.asList(name);
      StringBuilder sb = new StringBuilder();
      for(int i = s.indexOf("H ---- ")+1; i < s.indexOf(" ---- "); i++)
          sb.append(s.get(i));
      System.out.println(sb);
      

      【讨论】:

        【解决方案3】:

        我会这样做

        private static String copyFrom(String[] in, String begin, String end) {
            StringBuilder sb = new StringBuilder();
            boolean start = false;
            if (in != null) {
                for (String s : in) {
                    if (!start) {
                        start = s.equals(begin);
                    } else {
                        start = !s.equals(end);
                        if (start) {
                            sb.append(s);
                        }
                    }
                }
            }
            return sb.toString();
        }
        
        public static void main(String[] args) {
             String[] name = {"aval", "H ---- ", "Singh", "Sawh", 
                         "Raman", " ---- ", "parminder", "kaur", 
                         "jaspreet", "asneet", " ---- "};
             String keywords = copyFrom(name, "H ---- ", " ---- ");
             System.out.println(keywords);
        }
        

        输出

        SinghSawhRaman
        

        【讨论】:

          【解决方案4】:
          String keywords = "";
          boolean append = false;
          for(j = 0; j <= name.length; j++) {
              if(name[j].contains("H----")
                  append = true;
              if(append)
                  keywords += name[j];
              if(name[j].contains("----") {
                  append = false;
                  break;
              }
          }
          

          请注意,如果您将if(name[j].contains("H----") 块移动到if(append) 块下方,您将从keywords 字符串中排除H---

          【讨论】:

            【解决方案5】:

            一旦达到您的条件,只需跳出外循环:

                boolean capture = false;
                for (String n : name) {
                    if (n.contains("H ---- ")) {
                        capture = true;
                    } else if (n.contains(" ---- ")) {
                        break;
                    } else if (capture) {
                        keywords = keywords + n;
                    }
                }
            

            如果H -------- 多次出现,则不要将break 置于循环之外,而只需设置capture = false 而不是break

            使用两个嵌套循环,您将读取构成名称一部分的任何元素两次,这是低效的。除非可以使用 nested H ---- 命名,否则最好删除内部循环。

            【讨论】:

              【解决方案6】:
              String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Raman", " ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "};
              String key ="";
              boolean flag = false;
              for(String s : name){
                  if(s.equals("H ---- ")){
              flag = true;
              }
              if(s.equals(" ---- ")){
              flag = false;
              }
              if(flag && !s.equals("H ---- ")){
              key+=s;
              }
              }
              System.out.println(key);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-05-21
                • 1970-01-01
                • 2012-09-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多