У меня есть txt документ под названием data.txt со следующим содержимым:

Account Name: Joe
  Account #: 50
  Account Balance: $105.0
  Check #: 110

Я хотел бы проанализировать файл выше, чтобы получить информацию, идущую :. Например, если бы я взял Account Name, я бы хотел, чтобы метод возвращал строку Joe.

Я написал метод get(String target), как показано ниже, который не работает должным образом.

Обратите внимание, : target - это поле, которое я хотел бы получить из внутреннего содержимого. Используя приведенный выше пример с Account Name:

getValue("Account Name") (Возвращает) "Joe"

public static String getValue(String target)
{
    File file = new File("data.txt");

    try
    {
        reader = new Scanner(file);
    } catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

    String data = null;
    StringBuilder sb = new StringBuilder();

    while (reader.hasNextLine())
    {
        sb.append(reader.nextLine()); 
    }

    data = sb.toString().replaceAll("\\s+", "").trim().toLowerCase();

    String value = null;

    if (data.contains(target))
    {
        //stuck here
    }

    return value;
}
2
Nicholas Adamou 4 Апр 2017 в 02:50

2 ответа

Лучший ответ
// Call this method for a required target
public static String getKey(String target) {
    Map<String, String> keyValueMap = loadKeyValueMap();
    return keyValueMap.get(target);
}

//load the keys and values only once from your input data file.
public static Map<String, String> loadKeyValueMap()
{
    File file = new File("data.txt");
    Scanner reader = null;
    try
    {
        reader = new Scanner(file);
    } catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

    Map<String, String> map = new HashMap<>();

    while (reader.hasNextLine())
    {
        String nextLine = reader.nextLine();
        String[] split = nextLine.split(":");
        if (split.length() >= 2) map.put(split[0].trim(), split[1].trim());
        else break;
    }
    return map;
}
0
Nicholas Adamou 4 Апр 2017 в 00:34

Вы можете попробовать это:

while (reader.hasNextLine()) {
        String text = reader.nextLine().trim();
        if (text.startsWith(target)) {
            String result = text.substring(target.length()+2);
            return result;
        }
    }

Остальное через некоторое время вы можете удалить.

Вам просто нужно добавить оператор возврата в конце, если нет совпадения.

0
RichArt 4 Апр 2017 в 00:25