【问题标题】:Quickest algorithm/methods to find a varying string within a constant string?在常量字符串中找到变化字符串的最快算法/方法?
【发布时间】:2013-03-31 16:21:10
【问题描述】:

标题我的意思是公共类声明始终相同,但名称不同:

public class <class name>

我想在 Java 源代码(在 JTextArea 中)搜索公共类。

所以首先它会找到:

public class Example1public class Example2public class Example3

等等。

然后我想存储字符串Example1Example2Example3

这个程序将用 Java 编写。

谁能帮帮我?

更新:

试了一下,对 Pattern 和 Matcher 类非常陌生。

private String findPublicClass() {
    Pattern pattern = Pattern.compile("\\s*public\\s+class\\s+(\\w+)");
    Matcher matcher = pattern.matcher(txtSource.getText());
    String s = null;
    boolean found = false;
    while (matcher.find()) {
        s = matcher.group(1);
        found = true;
    }
    if(!found)
        System.out.println("No public class found.");
    return s;
}

【问题讨论】:

  • 到目前为止你写过代码吗?如果没有,我建议你尽力而为,然后带着一些示例代码回到这里,这样我们可以更好地帮助你,所以我们知道你至少尝试过。
  • @Franklin 我试了一下。

标签: java string search


【解决方案1】:

我的建议是遵循 Java 教程中的 lessons on Regular Expressions

【讨论】:

  • 我同意,使用模式和捕获来查找和获取您正在寻找的信息。这比substring 比较快得多
  • 只是看了一下,这看起来是个好方法,我会尝试变出一些东西并发布我得到的东西。
  • @mthmulders 我很快就开始了,但我是新手。
  • @mthmulders 我现在关门了吗?
【解决方案2】:

由于名称不同,常量部分是“public class”,它有一个固定长度,比如 10。所以你总是可以通过使用 substring(10) 来获取你的类名。

希望对您有所帮助。

编辑:

示例代码

If(line.contains("public class"))
  return line.substring(10);

【讨论】:

  • 是的,但可能有导入/包声明?
  • 有人可以 exaplin sownvote 吗,为什么这个答案没有用?
  • 实际上@Lokesh 根据这个问题给出了一个有效的答案,我只是不会硬编码(10),因为位置可能会有所不同并使用位置函数。但是我也得到了一个有效答案的-1,谁知道:)我们有一个不喜欢人们回答的新手?
  • @Lokesh 当然。您需要大约 1.5 行完整的文本来说明为什么它是 10 而不是 154-1。代码应该尽可能简单。当有人需要查找私人课程时,他是否也应该使用line.substring(10)?很难说 - 他需要考虑一下,或者只是问你。你喜欢回答不需要的问题吗? :) 如果没有,你的代码应该记录它的安全性。您需要显示public class 和您的10 之间的联系。那么你就会知道这个值不等于 10...
【解决方案3】:

嗯,一种快速、肮脏且非常快速的方法是使用从位置 0 到 L-1(长度)运行的循环读取字符串,并使用索引“i”表示匹配的字符数。

每次匹配一个字符时你会 i++,否则 i=0;

这样,当 i 等于要查找的字符串的长度时,您将获得匹配。其余部分是您正在寻找的另一部分(可变部分)。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2016-10-05
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多