Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算这些值?_Java_String - Fatal编程技术网

Java 如何计算这些值?

Java 如何计算这些值?,java,string,Java,String,我有一个数据库,它通常生成一个3000行的文件,实际上我想计算LAYERID的数量 我的数据库文件如下所示: CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED; CREATE BUTYP=ACB8T,RAAT=FALSE,GBPATH=AAP4,GTXT=12; CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED; CREATE TRMD=GFT,LAYID=LY_01,USFGN=DISABLED; CREATE TRMD=

我有一个数据库,它通常生成一个3000行的文件,实际上我想计算LAYERID的数量

我的数据库文件如下所示:

CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED;
CREATE BUTYP=ACB8T,RAAT=FALSE,GBPATH=AAP4,GTXT=12;
CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_01,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_01,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_02,USFGN=DISABLED;
CREATE BUTYP=ACB9T,RAAT=TRUE,GBPATH=AAP4,GTXT=32;
CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_01,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_02,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_03,USFGN=DISABLED;
CREATE TRMD=GFT,LAYID=LY_03,USFGN=DISABLED;
CREATE BUTYP=ACB2T,RAAT=TRUE,GBPATH=AAP4,GTXT=1;
CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED;
CREATE BUTYP=ACB8T,RAAT=FALSE,GBPATH=AAP4,GTXT=2;
CREATE TRMD=GFT,LAYID=LY_00,USFGN=DISABLED;
CREATE BUTYP=ACB8T,RAAT=TRUE,GBPATH=AAP4,GTXT=3;
如果我们只有“
LAYID=LY_00
”(如第一行),我们必须忽略它,但如果在“
LAYID=LY_00
”下有“
LAYID=LY_01
和…”(如第三行),我们必须计算“
LAYID=LY_00
”和其他层,例如在第3行到第6行,我们有4个层ID

LAYID=LY_00
LAYID=LY_01
LAYID=LY_01
LAYID=LY_02
所以计数是4,如果我们想数一数,我们有9,就像我之前说的,如果我们有

LAYID=LY_00类似于第1行,我们忽略它

我还编写了逐行读取的方法:

public void execToken(File f) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader(f));
        String line;
        while ((line = br.readLine()) != null) {
            StringTokenizer strt = new StringTokenizer(line, ";");
            while (strt.hasMoreTokens()) {
                String token = strt.nextToken();
                layerSupport(token);
            }
        }
    }
我知道下面的方法还不完全正确,但它可能对你有用

public void layerSupport(String token){
        if(token.startsWith("CREATE TRMD") && !token.contains("LAYID=LY_00"))
            System.out.println(token) ;

    }   
非常感谢你的帮助

诸如此类:

public int execToken(File f) throws Exception {
    BufferedReader br = new BufferedReader(new FileReader(f));
    int count = 0;
    String line;
    String previousLine = ""; 
    while ((line = br.readLine()) != null) {
        if (line.startsWith("CREATE TRMD")) {
            if (!previousLine.isEmpty()) {
                count += (previousLine.contains("LAYID=LY_00") ? 2 : 1);
            }
            previousLine = line;
        } else {
            previousLine = "";
        }
    }

    return count;
}
没有测试

public int execToken(File f) throws Exception
{
    BufferedReader br = new BufferedReader(new FileReader(f));
    String line;
    int count = 0;
    Pattern layID = Pattern.compile("LAYID=LY_\\d+");
    Matcher matcher = null;
    boolean isSingle = true;
    while ((line = br.readLine()) != null)
    {
        if(line.contains("LAYID=LY_00"))
        {
            isSingle = false;
            continue;
        }
        matcher = layID.matcher(line);
        if(matcher.find())
        {
            count++;
            if(!isSingle)
                count++;
        }

        isSingle = true;
    }
    return count;
}

试试这个。它会记住上一行是否包含
LAYID=LY_00
,并且在下一次迭代中递增计数两次,如果找到
LAYID=LY_
,并且isSingle为false。

您可能必须为此使用正则表达式。我不明白您的示例,您究竟如何推导
9
?也许你可以进一步解释一下?类似于@home,我也不明白。
previousLine
代表文件中的前一个“CREATE TRMD”行,每次我们遇到另一种类型的行时都会重置为
。非常感谢,这个方法非常令人印象深刻;)