【问题标题】:Add eight characters after a certain character from CharArray to a String将 CharArray 中某个字符后的八个字符添加到字符串
【发布时间】:2021-03-02 07:29:17
【问题描述】:

我有这个字符串:

}1311202013112020607169018}1611202016112020}1411202014112020626948615}1511202015112020}1811202018112020

为了帮助你理解,我会这样拆分:

}13112020 13112020607169018 }16112020 16112020 }14112020 14112020626948615 }15112020 15112020 
}18112020 181120207834

我要做的是在 '}' 字符之后取前八个字符(数字),它们代表日期。其他数字我根本不需要。

我已经尝试了许多不同的方法来使用 for 循环,这是我最后的代码。

for (int i = 0; i < Char.length; i++) {

     if(Char[i] == '}') {

          newString = newString + Char[i + 6];

     } 
}

所以我试图得到一个看起来像这样的字符串

}13112020}16112020}14112020}15112020}18112020

另外,如果有人能告诉我如何创建(如果可能的话)x 数量的新字符串,每个字符串都是不同的名称,只包含其中一个日期。

谢谢!

【问题讨论】:

    标签: java android arrays string char


    【解决方案1】:

    我们可以在这里尝试使用正则表达式字符串拆分:

    String input = "}1311202013112020607169018}1611202016112020}1411202014112020626948615}1511202015112020}1811202018112020";
    String[] parts = input.split("(?<=\\}\\d{8})|(?=\\})");
    System.out.println(Arrays.toString(parts));
    

    打印出来:

    [}13112020, 13112020607169018, }16112020, 16112020, }14112020, 14112020626948615,
     }15112020, 15112020, }18112020, 18112020]
    

    使用的正则表达式表示在字符串中的任意点拆分:

    (?<=\\}\\d{8})   what precedes is } followed by 8 digits
    |                OR
    (?=\\})          what follows is }
    

    编辑:

    鉴于您接受的答案,您似乎确实想要这个输出:

    }13112020}16112020}14112020}15112020}18112020
    

    为此,我建议使用简单的正则表达式替换:

    String input = "}1311202013112020607169018}1611202016112020}1411202014112020626948615}1511202015112020}1811202018112020";
    String output = input.replaceAll("(\\}\\d{8})\\d*", "$1");
    System.out.println(output);
    

    打印出来:

    }13112020}16112020}14112020}15112020}18112020
    

    【讨论】:

      【解决方案2】:

      您可以利用正则表达式来查找与您的模式匹配的所有子字符串。在这种情况下,正则表达式将是 "\}[0-9]{8}"(您说大括号后有 6 个字符,但您的示例显示了 8 个)。

      在 Java 中,您可以使用 PatternMatcher 编译此正则表达式并查找所有匹配的子字符串:

      import java.util.regex.Pattern;
      import java.util.regex.Matcher;
      
      String str = "}1311202013112020607169018}1611202016112020}1411202014112020626948615}1511202015112020}1811202018112020";
      
      Pattern pattern = Pattern.compile("\\}[0-9]{8}");  // have to double-escape brace
      Matcher matcher = pattern.matcher(str);
      
      // we use StringBuilder to concatenate the results
      StringBuilder result = new StringBuilder();
      while(matcher.find()) {
        result.append(matcher.group());
      }
      
      System.out.println(result.toString());
      

      【讨论】:

      • 是的,我不知道我在哪里看到了六个字符,我现在编辑了,谢谢。还要感谢您提供的所有答案,但这工作得很好,没有任何错误。
      【解决方案3】:

      所以据我了解,你需要这样的东西

      static List<String> getDates(String str){
            String[] arr = str.split("}");
            ArrayList<String> out = new ArrayList<>();
            for (int i = 0;i < arr.length;i++){
                  arr[i] = arr[i].trim(); //remove any spaces
                  if (arr[i].length() == 0) continue;
                  out.add(arr[i].subString(0 , Math.min(arr[i].length() , 6)); //to prevent any OutOfBounds Errors
                  
            }
            return out;
      }
      

      【讨论】:

        【解决方案4】:

        一个简单的方法:

        String text = new String(Char);
        List<String> lists = new ArrayList<String>();
        String[] split = text.split("}");
        
        for(String first: split) {
            lists.add(first.substring(0,5));
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-14
          • 1970-01-01
          • 2020-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-17
          • 1970-01-01
          相关资源
          最近更新 更多