Прочитайте файл и назначьте ключ, значения java

Поэтому я пытаюсь сделать алгоритм жадного / драгоценного ограбления в Java. Я сохранил цифры и веса для драгоценных камней в файл.txt. Моя программа правильно читает файл.txt, и я написал программу, которая может успешно их читать. это цифры из моего.txt файла

575 - bag limit
125 3000 (weight, value)
50 100
500 6000
25 30

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь добавить веса и значения в программу. в идеале программа будет читать кортежи и назначать им ключи и значения. Я пытался использовать хэш-карту и обычную карту, но они не работали. возможно, потому что они не в том месте. Я включил обе попытки карты и прокомментировал их, как в моей программе. Хотелось бы помочь с определением этих значений, чтобы я мог перейти к следующему шагу. Спасибо!!

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
//    import java.util.HashMap;
//    import java.util.Map;
    public class readstringastext {

        public static void main(String[] args) {
            try {
                File file = new File("test.txt");
                FileReader fileReader = new FileReader(file);
                BufferedReader bufferedReader = new 
                BufferedReader(fileReader);
                StringBuffer stringBuffer = new StringBuffer();
                String line;
                String weightLimit = Files.readAllLines(Paths.get("test.txt")).get(0); 
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuffer.append(line);
                    stringBuffer.append("\n");
                }
                fileReader.close();
    }       catch (IOException e) {
                e.printStackTrace();
            }
    }
            HashMap<String, String> map = new HashMap<String, String>();
//
//          for (String string : pairs) {
//              String[] keyValue = string.split(" "); 
//              map.put(keyValue[0], keyValue[1]);
//              System.out.println(keyValue);
//      };
//final class MyEntry<K, V> implements Map.Entry<K, V> {
//  private final K key;
//  private V value;
//  
//  public MyEntry(K key, V value) {
//      this.key = key;
//      this.value = value;
//  }   
//  @Override 
//  public K getKey() {
//      return key;
//  }
//  
//  @Override 
//  public V getValue() {
//      return value;
//  }
//  
//  @Override
//  public V setValue(V value) {
//      V old = this.value;
//      this.value = value;
//      return old;
//  }
//  Map.Entry<String, Object> entry = new MyEntry <String, Object>(key, value);
//  System.out.println(entry.getKey());
//  System.out.println(entry.getValue());
}



    }

попытка 2

public class readstringastext {

    public static HashMap<String, String> map = new HashMap<String, String>();
    public static void weightLimit() {
        String weightLimit = "";
        System.out.println(weightLimit);

// это чтобы увидеть, есть ли weightLimit, которого нет '. }

public static void main (String [] args) {

        try {
            File file = new File("test.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line;
            String weightLimit = "";
            boolean first = true;
            while ((line = bufferedReader.readLine()) != null) {
                if (first) {
                    weightLimit = line;
                    first = false;
                } else {
                    String[] values = line.split(" ");
                    map.put(values[0], values[1]);
                }
            }

            fileReader.close();
        }       catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2 ответа

Решение

Я вижу ваш код и вижу, что вы дважды прочитали файл с Files.readAllLines() а также standard method, Поэтому я предлагаю вам это решение, но вы можете использовать Files.readAllLines() тоже.

public class Main {

    public static HashMap<String, String> map = new HashMap<String, String>();
    private static String weightLimit = "";

    public static void main(String[] args){

        try {
            File file = new File("test.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line;
            boolean first = true;
            while ((line = bufferedReader.readLine()) != null) {
                if (first) {
                    weightLimit = line;
                    first = false;
                } else {
                    String[] values = line.split(" ");
                    map.put(values[0], values[1]);
                }

            }
            fileReader.close();
        }       catch (IOException e) {
            e.printStackTrace();
        }
        weightLimit();
    }

    public static void weightLimit() {
        System.out.println(weightLimit);
    }
}

Я полагаю, что вы хотите передать пару вес / значение в структуру данных карты, я немного изменил ваш код, чтобы включить это:

  public static void main(String[] args) {
    HashMap<String, String> map = new HashMap<String, String>();

    try {
        File file = new File("test.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        StringBuffer stringBuffer = new StringBuffer();
        String line;
        String weightLimit = Files.readAllLines(Paths.get("test.txt")).get(0);
        int count = 0;
        while ((line = bufferedReader.readLine()) != null) {
            if (count != 0) { // ignore the first line
                String[] splitValue = line.split(" ");
                map.put(splitValue[0], splitValue[1]);
            }     
            count++;
        }
        fileReader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
//        for (Map.Entry<String, String> entry : map.entrySet()) {
//            System.out.println(entry.getKey());
//            System.out.println(entry.getValue());
//        }
   }
Другие вопросы по тегам