Замена вывода одного метода на вывод другого метода - PullRequest
0 голосов
/ 01 июня 2011

Итак, у меня есть метод, который должен прочитать файл и определить, является ли символ после символа цифрой или словом. Если это число, я хочу удалить перед ним символ, перевести число в двоичное и заменить его в файле. Если это слово, сначала я хочу установить для символов число 16, но затем, если используется другое слово, я хочу добавить 1 к исходному числу.

Вот вход, который я использую:

Вот мой метод:

    try {
       ReadFile files = new ReadFile(file.getPath());
       String[] anyLines = files.OpenFile();

        int i;


    int wordValue = 16;

// to keep track words that are already used
Map<String, Integer> wordValueMap = new HashMap<String, Integer>();

for (String line : anyLines) {

if (!line.startsWith("@")) {
    continue;
}

line = line.substring(1);

Integer binaryValue = null;

if (line.matches("\\d+")) {
    binaryValue = Integer.parseInt(line);
}
else if (line.matches("\\w+")) {
    binaryValue = wordValueMap.get(line);



    // if the map doesn't contain the word value, then assign and store it
    if (binaryValue == null) {
        binaryValue = wordValue;
        wordValueMap.put(line, binaryValue);
        ++wordValue;
    }
}

   // --> I want to replace with this 
   System.out.println(Integer.toBinaryString(binaryValue));


}


        for (i=0; i<anyLines.length; i++) {

       // --> Here are a bunch of instructions that replace certain strings - they are the lines after @ symbols <--
       // --> I'm not going to list them ... <--

            System.out.println(anyLines[i]);

Итак, вопрос в том, как заменить те строки, которые начинаются с ("@" строка за строкой, по порядку?

Я в основном хочу, чтобы вывод выглядел так:

101
1110110000010000 
10000
1110001100001000 
10001
1110101010001000 
10001
1111000010001000 
10000
1110001110001000 
10010
1110001100000110 
10011
1110101010000111 
10010
1110101010000111 

1 Ответ

1 голос
/ 01 июня 2011

Я не совсем понимаю логику. Если вы просто пытаетесь заменить все символы @ по порядку, почему бы не прочитать все числа в порядке List, пока не увидите символ @. Затем вы можете начать заменять их по порядку с List (или Queue, так как вы хотите, чтобы первый пришел первым). Удовлетворяет ли это вашим требованиям?

Если вы должны сохранить wordValueMap, приведенный ниже код должен циклически проходить по строкам после заполнения wordValueMap и записывать их в консоль. Он использует ту же логику, которую вы использовали для заполнения карты в первую очередь, и выводит значения, которые следует заменить.

boolean foundAt = false;
for (i=0; i<anyLines.length; i++) {

  // --> Here are a bunch of instructions that replace certain strings - they are the lines after @ symbols <--
  // --> I'm not going to list them ... <--

  if (anyLines[i].startsWith("@")) {
    foundAt = true;
    String theLine = anyLines[i].substring(1);
    Integer theInt = null;
    if (theLine.matches("\\d+")) {
      theInt = Integer.parseInt(theLine);
    }
    else {
      theInt = wordValueMap.get(anyLines[i].substring(1));
    }

    if(theInt!=null) {
      System.out.println(Integer.toBinaryString(theInt));
    }
    else {
      //ERROR
    }
  }
  else if(foundAt) {
    System.out.println(anyLines[i]);
  }
}

Когда я запускаю этот цикл, я получаю вывод, который вы искали, из вашего вопроса:

101
1110110000010000 
10000
1110001100001000 
10001
1110101010001000 
10001
1111000010001000 
10000
1110001110001000 
10010
1110001100000110 
10011
1110101010000111 
10010
1110101010000111 

Надеюсь, это поможет, но взгляните на мой вопрос выше, чтобы увидеть, можете ли вы сделать это более прямым способом.

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