Средство чтения слов, которое разбирает текст в хэш-карту - PullRequest
0 голосов
/ 03 марта 2011

Цель этой программы - в некотором смысле быть читателем слов.Я хочу, чтобы он взял все слова между </p> и </p> и сохранил их в HashMap.Например, </p> b.ob </p> будет хранить строку b.ob в хэш-карте.Любая помощь или исправления будут с благодарностью.

public HashMap<String, List<String>> fillHashMap(String inputPath) {

    HashMap<String,List<String>> hash = new HashMap<String,List<String>>();  //creates hashmap
    CharacterFromFileReader reads = new CharacterFromFileReader(inputPath);

    String s = "";
    String p =  "</p>";
    char ch;

    while(reads.hasNext()){       //hasnext returns true if the iteration has more elements
    ch = reads.next();         //next returns the next element in the iteration
    s = "" + ch ;


    if(s.contains(p)){    //if(inputPath.indexOf("</p>") != -1){ original if statement
    int begin = s.indexOf(p);
    s = s.substring(begin); 

    if(s.contains(p)){
            int end = s.indexOf(p);
            s = s.substring(begin,end);
            hash.put(s, null);
        }
        }
    }   
    return hash;
    }
} 

Ответы [ 3 ]

0 голосов
/ 03 марта 2011

Ваша проблема в том, что ваша логика обрезки выполняется на первом

, поэтому вы никогда не читаете достаточно символов, чтобы увидеть следующий.

попробуйте что-то вроде этого:

int indexOfFirstP = s.indexOf(p);
int indexOfLastP = s.lastIndexOf(p);

if (indexOfFirstP >= 0 && indexOfLastP >= 0 && indexOfFirstP != indexOfLastP) {
  // then you've found a string with two </p>'s
}
0 голосов
/ 22 апреля 2011
static final String REG = "</p>";

public HashMap<String, List<String>> fillHashMap(String inputPath) {
    final HashMap<String, List<String>> map = new HashMap<String, List<String>>();

    try {
        final Scanner scanner = new Scanner(new File(inputPath));
        final StringBuilder fileContent = new StringBuilder("");

        while (scanner.hasNext()) {
            fileContent.append(scanner.nextLine());
            fileContent.append("\n");
        }
        scanner.close();

        final String[] entries = fileContent.toString().split(REG);

        for (int i = 0; i < entries.length; i++) {
            //we need every second element, counting from zero
            if (i % 2 == 1) {
                map.put(entries[i], null);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return map;     
}
0 голосов
/ 03 марта 2011

Вы можете использовать StringTokenizer для этого:

    String input = //readFromFile()
    Set<String> set = new HashSet<String>();
    StringTokenizer st = new StringTokenizer(input, "</p>");
    while(st.hasMoreTokens()) {
        set.add(st.nextToken());
    }

Кроме того, Карта должна использоваться для хранения пар ключ-значение, Установить подходит намного лучше здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...