读取具有条件的特定子字符串

时间:2013-07-14 13:58:37

标签: java substring

我在文本文件中有这个:

134.897 134.4565 135.134

我使用以下方式阅读:

  while (( line = buffreader.readLine()) != null) {

                String[] parts = line.split(" ");
                    String x1 = (parts[0]);   
                String x2 = (parts[1]);  
                    String x3 = (parts[2]); 

来自文本文件中的字符串:

134.897
134.4565
135.134

我只想在这三个数字之间采用不同的数字

4.897
4.4565
5.134

给出更多例子:

文字档案:

101.435 
101.423 
101.322

我想要的号码:

435
423 
322

我的计划是我要将每个号码与其他号码进行比较,

101.435//x1
101.423//x2
101.322//x3

if x1.substring(0)=x2.substring(0)=x3.substring(0)
then remove substring(0).

我想循环这个“if”条件,直到子串不相同。

请给我一些想法,谢谢

2 个答案:

答案 0 :(得分:0)

以下是可以使用的算法的骨架:

List<String> inputs = ...;
int index = 0;
while (allTheStringsHaveTheSameCharacterAtIndex(inputs, index)) {
    index++;
}
List<String> outputs = takeSubstringOf(inputs, index);

我将让你填充空白,这些空白很容易用String类提供的方法和循环来实现。

答案 1 :(得分:0)

你没有回答@Steve有关不同长度数字的情况,我假设你想根据字符顺序比较数字。另外,我假设文件总是在一行中包含三个字符串,由一个空格分隔。

鉴于此,我希望这会有所帮助:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class FindDifference {
    static File f = null;
    ArrayList<String> inputs = new ArrayList<String>();
    static String x1 = null;
    static String x2 = null;
    static String x3 = null;

    private static ArrayList<String> getDifferenceList() {
        ArrayList<String> ret = new ArrayList<String>();
        if (x1 == null || x1.isEmpty()
                || x2 == null || x2.isEmpty()
                || x3 == null || x3.isEmpty()) {

            ret.add(x1);
            ret.add(x2);
            ret.add(x3);

            return ret;
        }

        int index = 0;

        while (index < x1.length()
                && index < x2.length()
                && index < x3.length()) {
            if (x1.charAt(index) != x2.charAt(index)
                    || x1.charAt(index) != x3.charAt(index)) {
                break;
            }
            index++;
        }

        ret.add(x1.substring(index, x1.length()));
        ret.add(x2.substring(index, x2.length()));
        ret.add(x3.substring(index, x3.length()));

        return ret;
    }

    public static void main(String[] args) {
        if (args.length > 0) {
            f = new File(args[0]);
        } else {
            System.out.println("Please supply file path.");
            return;
        }

        String line;

        BufferedReader buffreader = null;

        try {
            buffreader = new BufferedReader(new FileReader(f));
            while (( line = buffreader.readLine()) != null) {
                String[] parts = line.split(" ");
                x1 = (parts[0]);   
                x2 = (parts[1]);  
                x3 = (parts[2]); 
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ArrayList<String> output = getDifferenceList();
        try {
            System.out.println(output.get(0));
            System.out.println(output.get(1));
            System.out.println(output.get(2));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }   
}

我做了SSCCE。您只能在代码中使用getDifferenceList(提供x1,x2,x3作为字段)(在需要的地方删除“静态”)。

修改

正如我所说,你可以在任何范围内使用getDifferenceList(包括Android应用程序)。我单独复制此方法,只需将其复制粘贴到您想要的任何类中,并调用它传递文件路径:

    ArrayList<String> getDifferenceList(String filePath) {
        File f = new File(filePath);

        String line, x1 = null, x2= null, x3 = null;

        BufferedReader buffreader = null;

        try {
            buffreader = new BufferedReader(new FileReader(f));
            while (( line = buffreader.readLine()) != null) {
                String[] parts = line.split(" ");
                x1 = (parts[0]);   
                x2 = (parts[1]);  
                x3 = (parts[2]); 
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ArrayList<String> ret = new ArrayList<String>();
        if (x1 == null || x1.isEmpty()
                || x2 == null || x2.isEmpty()
                || x3 == null || x3.isEmpty()) {

            ret.add(x1);
            ret.add(x2);
            ret.add(x3);

            return ret;
        }

        int index = 0;

        while (index < x1.length()
                && index < x2.length()
                && index < x3.length()) {
            if (x1.charAt(index) != x2.charAt(index)
                    || x1.charAt(index) != x3.charAt(index)) {
                break;
            }
            index++;
        }

        ret.add(x1.substring(index, x1.length()));
        ret.add(x2.substring(index, x2.length()));
        ret.add(x3.substring(index, x3.length()));

        return ret;
    }