2013-07-14 3 views
0

я это из текстового файла:прочитать конкретные подстроки с условием

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). 

Я хочу закодировать это условие «если», пока подстрока не будет одинаковой.

Пожалуйста, дайте мне некоторое представление, благодаря

+2

Как прийти результаты первого примера включают десятичные точки в то время как вашего второго примера не ? – arshajii

+0

Я не понимаю, чего вы хотите. Как вывод 4.897 4.4565 5.134 относится к входу 134.897 134.4565 135.134? Пожалуйста, объясните более четко, что вы пытаетесь сделать с 3 номерами ввода. – NickJ

+0

@NickJ: Это одно место, десятичная точка и дробная часть, но это не соответствует его второму примеру. – jason

ответ

0

Вот скелет алгоритма, который может быть использован:

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

Я дам вам заполнить пробелы, которые очень легко реализовать с методы, предлагаемые классом String, и циклы.

+0

Помогите мне, он сказал, что не может преобразовать String в список doraemon

+0

'Список Входы = Arrays.asList (parts);' Но вы можете напрямую использовать массив 'parts', если вы знаете о массивах, но не о коллекциях. Просто замените 'List ' на 'String []' в моем алгоритме. –

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 в виде полей) в своем коде (удалите «статические» везде, где это необходимо).

EDIT

Как я уже говорил, вы можете использовать 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; 
    } 
+0

Да, вы поняли, что я имею в виду. Где мне нужно указать мой файл? static file f = "textfile.txt"; ? – doraemon

+0

@doraemon: сначала запрограммируйте алгоритм с жестко запрограммированным массивом строк. После правильного алгоритма прочитайте учебник об IO на Java, используйте его, чтобы научиться читать символы из файла, а затем применить алгоритм. Но вы должны начать с чтения книги об основах Java: переменных, типов. Присвоение строки переменной типа File не имеет смысла, и вы должны это узнать в первую очередь. –

+0

@doraemon, вам нужно указать путь к файлу в качестве аргумента программы, способ сделать это зависит от вашей среды IDE. Вы работаете с eclipse? IntelliJ? Вы также можете просто изменить код и hardcode путь - 'f = новый файл (« Your \\ File \\ Path.txt »); вместо' f = new File (args [0]); ' – Elist

Смежные вопросы