【问题标题】:how do i substring a line on search of a particular name?如何在搜索特定名称时对一行进行子串?
【发布时间】:2014-04-19 04:31:31
【问题描述】:

在我的代码中,我必须在行找到“包”和“类”的地方打印包名称和类名称。 如果索引已知,我知道如何子串/拆分。 在我的情况下,包名和类名会在不同的文件中改变,所以有点困惑如何去做。 例如:

package com.sify;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class WriteJava{

}
public class WriteJava2{

}

输出应该是;

包名:com.sify 类名:WriteJava 类名:WriteJava2

任何帮助都是可观的。

提前致谢。

稍微编辑了我的代码。 如果在“package com.sify;”之后有其他行怎么办?如代码中所示。 我将如何对额外的导入部分进行子串化。

【问题讨论】:

  • 查看正则表达式。

标签: java string split substring


【解决方案1】:

使用 String.indexOf(String) 方法查找行中“包”和“类”字符串的第一个位置。然后从这个位置的末尾取子串到第一个分号。像这样的:

String line;
while ((line = readLine()) != null) {
    String packageName = null, className = null;
    int indexOfPackage = line.indexOf("package");
    int indexOfClass = line.indexOf("class");
    int indexOfBrace = line.indexOf('{');
    int indexOfSemiColon = line.indexOf(';');
    int classStringLength = "class ".length();
    int packageStringLength = "package ".length();
    if (indexOfPackage != -1) {
        packageName = line.substring(indexOfPackage + packageStringLength, indexOfSemiColon);
    }
    if (indexOfClass != -1) {
        className = line.substring(indexOfClass + classStringLength, indexOfBrace);
    }

    System.out.println("Package Name: " + packageName + " ");
    System.out.print("Class Name: " + className + " ");
}

【讨论】:

  • 非常感谢 gilbert。你能解释一下第 5 行和第 8 行吗。
  • 这段代码可以工作,但如果在最坏的情况下有人会在“;”之后添加另一行我将如何对那部分进行子串化。例如包 com.sify;导入 java.io.File;导入 java.io.FileNotFoundException;导入 java.io.FileReader;导入 java.io.IOException; public class WriteJava{ } public class WriteJava2{ } 在这种情况下,输出为 ;包名:com.sify;import java.io.BufferedReader;我不想要。我只需要包名,它应该在';'之前结束。请澄清我。
  • 我已经编辑了答案以更清楚地显示这些行在做什么。我还将包和类名的结尾限制为“;”更通用。和'{'分别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 2015-04-01
  • 2017-03-30
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多