Member 12589834 Ответов: 1

Как создать программу, которая извлекает все слова, заданные в двойных кавычках, в качестве параметров командной строки


Мне нужно создать программу, в которой вы помещаете строку в двойные кавычки, и она проходит как один параметр командной строки, только с одним пробелом, разделяющим слова, без использования StringTokenizer. Вы бы ввели "$ java Comm "это тест"", и результат был бы таким:
[этот]
[есть]
[ля]
[тест]

Что я уже пробовал:

Вот что у меня есть до сих пор, я могу заставить его распечатать первое слово, но я не могу понять, как заставить его напечатать остальное:

public class Comm
{

    public static void main(String argv[])
    {
        if (argv.length != 1)
        {
            System.out.println("usage:  Comm \"STRING IN QUOTES\"");
            System.exit(0);
        }

        String str = argv[0];

        String token;
        int space = str.indexOf(' ');
        int i = 0;

        while(i<argv.length)
        {
            token = str.substring(0, space);
            System.out.println("[" + token + "]");
            i++;
        }


    
    }
}

1 Ответов

Рейтинг:
10

Richard MacCutchan

Каждый раз вы начинаете поиск подстроки с самого начала. Вы также увеличиваете i только на единицу, вместо того чтобы каждый раз устанавливать его в начало следующего токена. Попробовать следующее:

String token;
int space = 1; // just to satisfy the while clause first time
int i = 0; // start first search at the beginning

while(space > 0)
{
    space = str.indexOf(' ', i); // find the start of the next token
    if (space > 0) // if we found a space
        token = str.substring(i, space); // extract the number of characters
    else
        token = str.substring(i); // end of argv so we just need the offset
    System.out.println("[" + token + "]");
    i = space + 1; // start indexof from the next token
}


Member 12589834

Спасибо за объяснения, я действительно ценю это!

Richard MacCutchan

Пожалуйста. Это не идеальное решение, но должно дать вам несколько идей, чтобы попробовать еще несколько вещей самостоятельно.