如何在java中读取文本文件?

时间:2018-06-06 18:29:11

标签: java string

如何从包含文字和数字的逐行文字文件中选择数字?

例如:

[10] begin0-1-selp-2-yelp-25-jelp-21-hi-35-ou

我希望在没有0 1 2 25 21 35的情况下打印[10]。但我一直在10012252135

这是我的代码

try {
    Scanner scan = new Scanner(file);

    while (scan.hasNextLine()) {
        String i = scan.nextLine();
        String final_string = "";

        for (int j = 0; j < i.length(); j++) {
            char myChar = i.charAt(j);
            if (Character.isDigit(myChar)) {
                final_string = final_string.concat(Character.toString(myChar));                     
            }
        }

        System.out.println(final_string);                                                                                                       
    }

    scan.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

6 个答案:

答案 0 :(得分:1)

test_2.0

我做了一个正则表达式我不能使它成为一行,但输出是病态的。 OutPut

master

答案 1 :(得分:1)

我喜欢Reaz Murshed的回答, 但是,如果你有多个数字出现在&#34; []&#34;你可以通过记住你当前是否只是一个封闭的范围来过滤那些:

char NON_NUMERIC_SCOPE_START = '[';
    char NON_NUMERIC_SCOPE_END = ']';

    try {
        Scanner scan = new Scanner(file);

        while (scan.hasNextLine()) {

            String i = scan.nextLine();

            String final_string = "";
            boolean possibleNumericScope = true;
            for (int j = 0; j < i.length(); j++) {
                char myChar = i.charAt(j);
                if (myChar == NON_NUMERIC_SCOPE_START) {
                    possibleNumericScope = false;
                } else if (myChar == NON_NUMERIC_SCOPE_END && !possibleNumericScope) {
                    possibleNumericScope = true;
                } else if (Character.isDigit(myChar) && possibleNumericScope) {
                    final_string = final_string.concat(Character.toString(myChar));
                }
            }
            System.out.println(final_string);

        }
        scan.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

答案 2 :(得分:0)

我认为第一部分是行号,可以通过空格分割String i = "[10] begin0-1-selp-2-yelp-25-jelp-21-hi-35-ou"; String final_string = ""; // Split the String with space to remove the first portion which // might be indicating the line number or something like that. String[] splittedArray = i.split(" "); // Then just run the loop in the second item of the split // `String` array. int contCount = 0; for (int j = 0; j < splittedArray[1].length(); j++) { char myChar = splittedArray[1].charAt(j); if (Character.isDigit(myChar)) { contCount = 0; final_string = final_string.concat(Character.toString(myChar)); } else { if (contCount == 0) final_string = final_string + " "; contCount++; } } System.out.println(final_string); 来轻松省略。请尝试以下代码。

string NaamG = Convert.ToString(Session["GNaamp"]);

if (NaamG.Text = "User1")
{

}

答案 3 :(得分:0)

我在循环之前添加了一行来摆脱[line-number]:

    i = i.substring(i.indexOf("]")+1);                 
    for (int j = 0; j < i.length(); j++) {

这应该可以解决问题。

答案 4 :(得分:0)

如果你总是拥有[10],那么你可以编辑你的final_string,除了前两个数字之外的所有东西。将System.out.println(final_string)更改为System.out.println(final_string.substring(2))。然后,如果需要空格,请键入final_string + =&#34; &#34 ;;在for循环的if语句中。

答案 5 :(得分:0)

试试这个:

String y = "[133] begin0-1-selp-2-yelp-25-jelp-21-hi-35-ou";
String result = y.replaceAll("\\[[0-9]*\\]|[a-zA-Z-]*", "");   

或者

String y = "[133] begin0-1-selp-2-yelp-25-jelp-21-hi-35-ou";
String result = y.replaceAll("\\[[\\d]*\\]|[^\\d]", "");

许多方法:)