【问题标题】:How to parse this string in Java?如何在 Java 中解析这个字符串?
【发布时间】:2009-06-04 12:57:49
【问题描述】:

前缀/dir1/dir2/dir3/dir4/..

如何从Java中解析出上述字符串中的dir1, dir2值?

这里的前缀可以是:

/usr/local/apache2/resumes

【问题讨论】:

  • 你能说清楚你想在这里解析什么吗?
  • 对不起,错过了,刚刚更新。
  • 您是否在尝试解析 URL?
  • 那个前缀完全改变了问题。

标签: java string


【解决方案1】:

如果您想在/ 字符处拆分StringString.split 方法将起作用:

例如:

String s = "prefix/dir1/dir2/dir3/dir4";
String[] tokens = s.split("/");

for (String t : tokens)
  System.out.println(t);

输出

prefix
dir1
dir2
dir3
dir4

编辑

前缀中带有/的情况,我们知道前缀是什么:

String s = "slash/prefix/dir1/dir2/dir3/dir4";

String prefix = "slash/prefix/";
String noPrefixStr = s.substring(s.indexOf(prefix) + prefix.length());

String[] tokens = noPrefixStr.split("/");

for (String t : tokens)
  System.out.println(t);

不带前缀"slash/prefix/" 的子字符串由substring 方法生成。然后 String 将贯穿 split

输出:

dir1
dir2
dir3
dir4

再次编辑

如果这个String 实际上是在处理文件路径,那么使用File 类可能比使用字符串操作更可取。像 File 这样已经考虑到处理文件路径的所有复杂性的类将会更加健壮。

【讨论】:

  • 如果前缀有/怎么办?
  • Shore,您应该编辑您的问题并澄清前缀、dir1 等可能的值...您是否要解析 URL?
【解决方案2】:
...
String str = "bla!/bla/bla/"

String parts[] = str.split("/");

//To get fist "bla!"
String dir1 = parts[0];

【讨论】:

    【解决方案3】:

    在这种情况下,为什么不使用new File("prefix/dir1/dir2/dir3/dir4") 并从那里开始?

    【讨论】:

      【解决方案4】:
      字符串 str = "/usr/local/apache/resumes/dir1/dir2"; 字符串前缀 = "/usr/local/apache/resumes/"; 如果(str.startsWith(前缀)){ str = str.substring(0, prefix.length); 字符串部分[] = str.split("/"); // dir1=parts[0]; // dir2=parts[1]; } 别的 { // 它不是以你的前缀开头 }

      【讨论】:

      • 几乎 - 你只是用那个 substr 解析前缀。试试 str = str.substring(prefix.length) 。
      【解决方案5】:
       String result;
       String str = "/usr/local/apache2/resumes/dir1/dir2/dir3/dir4";
       String regex ="(dir)+[\\d]";
       Matcher matcher = Pattern.compile( regex ).matcher( str);
        while (matcher.find( ))
        {
        result = matcher.group();     
        System.out.println(result);                 
      }
      

      输出—— 目录1 目录2 目录3 目录4

      【讨论】:

        【解决方案6】:

        使用String.split 方法肯定会按照此处其他答案中的说明工作。

        另外,StringTokenizer 类可用于解析字符串,使用/ 作为分隔符。

        import java.util.StringTokenizer;
        public class Test
        {
            public static void main(String []args)
            {
                String s = "prefix/dir1/dir2/dir3/dir4/..";
                StringTokenizer tokenizer = new StringTokenizer(s, "/");
                String dir1 = tokenizer.nextToken();
                String dir2 = tokenizer.nextToken();
                System.out.println("Dir 1  : "+dir1);
                System.out.println("Dir 2 : " + dir2);
            }
        }
        

        输出为:

        Dir 1  : prefix
        Dir 2 : dir1
        

        在这里你可以找到更多关于StringTokenizer的信息。

        【讨论】:

        • 你知道其他过时的类来解决这个任务吗?
        • @Tom StringTokenizer 是一个过时的课程吗?
        • 你最近检查过StringTokenizer的JavaDoc吗?
        • 是的,找到了这个:StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead. 谢谢
        【解决方案7】:

        如果是File,你可以通过创建instanceof File来获取parts,然后请求它的segments。

        这很好,因为无论斜线的方向如何,它都可以工作;它与平台无关(Windows 中的“驱动器号”除外...)

        【讨论】:

          【解决方案8】:
          public class Test {
              public static void main(String args[]) {
              String s = "pre/fix/dir1/dir2/dir3/dir4/..";
              String prefix = "pre/fix";
              String[] tokens = s.substring(prefix.length()).split("/");
              for (int i=0; i<tokens.length; i++) {
                  System.out.println(tokens[i]);
              }
              }
          
          }
          

          【讨论】:

          • 前缀也可以有/。这里的前缀不是字面上的“前缀”
          • 你知道解析的前缀吗?然后获取前缀的长度,并在调用 parse 之前使用 substring to 来获取字符串的最后一段。
          【解决方案9】:

          String.split(String regex) 很方便,但如果您不需要正则表达式处理,请使用 substring(..) 示例 java.util.StringTokenizer 或使用 Apache commons lang 1。不使用正则表达式时的性能差异可能会提高 1 到 2 个数量级的速度。

          【讨论】:

            【解决方案10】:
            String s = "prefix/dir1/dir2/dir3/dir4"
            
            String parts[] = s.split("/");
            
            System.out.println(s[0]); // "prefix"
            System.out.println(s[1]); // "dir1"
            ...
            

            【讨论】:

            • 前缀也可以有/。
            猜你喜欢
            • 2021-08-24
            • 2018-05-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多