我在程序中编写了一个函数,允许我检索字符串和单独的字符串。即,字符串:
'复制'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)
有什么想法吗?感谢。
答案 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;
}