Как я могу разобрать BigInteger, но с помощью StringTokenizer - PullRequest
0 голосов
/ 08 ноября 2018
public static void main(String[] args) throws FileNotFoundException {
    // SPLASH 
    // OBJECTS 
    File file1 = new File ("DATA11.txt");
    File file2 = new File ("OUT11.txt");
    Scanner scanner = new Scanner(file1); 
    PrintWriter writer = new PrintWriter(file2); 
    StringTokenizer st = null;

    // CONSTANTS 
    // VARIABLES 
    String sentence; 
    String reverse = ""; 
    int length; 
    boolean isNumber = false; 

    // INPUT 
    while (scanner.hasNextLine())
    {
        sentence = scanner.nextLine(); 
        length = sentence.length(); 
        for (int i = length - 1; i >= 0; i--)
        {
            reverse += sentence.charAt(i); 
        }
        st = new StringTokenizer(reverse, " "); 
        try
        {
            Integer.parseInt(st.nextToken()); 
        }
        catch (NumberFormatException e)
        {

        }

    }

Я выполняю строковое задание, и мне нужно перевернуть предложение и слова, но цифры нельзя поменять местами. Я использую StringTokenizer для токенизации TXT-файла с именем DATA11.txt и записи в файл с именем OUT11.txt (я знаю, что я еще не закрыл читателя и писателя). Сначала я переворачиваю все предложение и буквы независимо от того, является ли это число или нет, а затем проверяю, является ли это int, который я могу перевернуть (строки типа 123abc сохраняются в обратном порядке). Одна из строк в файле имеет целое число длиной 22 символа. Мне было интересно, как я могу разобрать токенизированную строку с помощью BigInteger.

Вот текстовый файл:

Лав, нет реба для селттоба 98 dnuora ti ssap nwod 1, ekat uoy reeb, для селттоба 99 Лав, нет реба для селттоба 99

0123456789

saera rellams 51 fo edam yllautca tnsi 15aerA

secalp lamiced 10 ot ip si 6356295141p3

elpmaxe rof 1212323423409234092340 ekil srebmun gnol ylaer daer ot drah fo dnik steg ti tub эгогнал лок иттерп си сибарА

1 Ответ

0 голосов
/ 08 ноября 2018

Документация является хорошим источником знаний. Если вы хотите BigInteger, вы должны открыть страницу документации об этом и найти то, что вы ищете. в вашем случае это может быть конструктор описание .

Я должен рассмотреть несколько обновлений вашего кода:

  • понять, когда следует использовать конкатенацию строк (s += "a") и когда лучше использовать StringBuilder . Строка является неизменным объектом, поэтому каждый раз, когда вы делаете конкатенацию внутри цикла, создается новая строка. Чтобы перевернуть 10 букв слова, вы создаете 10 строк.
  • вы можете предотвратить возврат числовых строк, например:
    • разбить предложение на строки public String[] split(String regex), документация , регулярное выражение в вашем случае - это пробел;
    • перебирать строки;
    • проверяет, является ли строка числовой, с помощью public boolean matches(String regex), документации , в этом случае регулярное выражение должно соответствовать только числам "\\d+".
...