Точное извлечение данных из строки - PullRequest
1 голос
/ 15 февраля 2012

Я написал функцию в моей программе, которая позволяет мне извлекать строки и отдельную строку. т.е. строка:

'copy "C: \ Users \ USERNAME \ Desktop \ file.bat" "C: \ Users \"'

приведет к появлению строки типа: «C: \ Users \ USERNAME \ Desktop \ file.bat» с функцией getArgs(command, 0), а другой «C: \ Users \» с функцией getArgs(command, 1).

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

Примечание: когда я говорю пусто, я не имею в виду NULL, я имею в виду "".

static String getArgs(String command, int argumentIndex)  {
    int start = 0;
    int end = 0;

    for (int i = 0; i <= argumentIndex; i++)  {
        start = command.indexOf("\"", end);
        end = command.indexOf("\"", start);

        if (i == argumentIndex)  {
            return command.substring(start, end);    
        }
    }

    return null;
}

Есть идеи? Спасибо.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

@ Darestium

According to your string it is clear that you've an empty space in between your paths. And also you've a problem with empty space. 

To make it simple just split the string with space and the use the last 2 in the output.

Use `split(String arg)` in your case it is 


String[] words=YOUR_STRING.split(" ");
           for(int i=0;i<llength;i++)
           { if(words[i].startsWith("\"") && words[i].endsWith("\"")
             {
                word[i];YOUR DESIRED OUTPUT
             }
           }
0 голосов
/ 15 февраля 2012

Попробуйте следующую коррекцию.Имейте в виду, что ваше решение пока работает, только если все аргументы в командной строке заключены в кавычки, даже те, которые не имеют пробелов.В приведенном вами примере первый аргумент ('copy') также должен быть заключен в кавычки, поскольку вы используете кавычки в качестве разделителей.

static String getArgs(String command, int argumentIndex)  {
    int start = 0;
    int end = -1;

    for (int i = 0; i <= argumentIndex; i++)  {
        start = command.indexOf("\"", end+1)+1;
        end = command.indexOf("\"", start+1);

        if (i == argumentIndex)  {
            return command.substring(start, end);    
        }
    }

    return null;
 }

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

static String getArgs(String command, int argumentIndex)  {
    int start = 0;
    int end = -1;
    String delimiter = " ";
    for (int i = 0; i <= argumentIndex && !command.equals(""); i++)  {
        if (command.startsWith("\"")) {
            delimiter = "\"";
            start = 1;
        } else {
            delimiter = " ";
            start = 0;
        }

        end = command.indexOf(delimiter, start+1);
        if (i == argumentIndex)  {
            end = (end==-1?command.length():end);
            return command.substring(start, end).trim();    
        } else {
            end = (end==-1?command.length():end+1);
            command = command.substring(end).trim();
        }
    }
    return null;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...