准确地从字符串中检索数据

时间:2012-02-15 06:39:39

标签: java string indexing

我在程序中编写了一个函数,允许我检索字符串和单独的字符串。即,字符串:

  

'复制'C:\ Users \ USERNAME \ Desktop \ file.bat“”C:\ Users \“'

会产生一个字符串:'C:\ Users \ USERNAME \ Desktop \ file.bat',函数为getArgs(command, 0),另一个'C:\ Users \',函数为{{1 }}

问题是该函数似乎总是检索一个空字符串。请对我这么宽容,这是我第一次在Java中使用字符串操作函数。

注意:当我说空时我并不是指NULL,我的意思是“”。

getArgs(command, 1)

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

@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
             }
           }

答案 1 :(得分:0)

尝试以下更正。请记住,只有当命令字符串中的所有参数都用引号括起来时,你的解决方案才有效,即使是没有空格的参数。在您提供的示例中,第一个参数('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;
 }