2015-04-24 33 views
1

我試圖從命令行參數獲取輸入並根據其類型對它們進行排序。例如在cmd中如果字符串子串或分隔符 - 從命令行參數插入數據插入

java myprog From:[email protected] To:[email protected] Body:this is message 

我「從」實現,用戶類型「爲」排序利用子 即

x = args.length; 
    for (int i = 0; i < x; i++) { 
      if (args[i].startsWith("From:")) { 
       from = args[i].substring(5); 
      } else if(args[i].startsWith("To:")) { 
       to = args[i].substring(3); 
      } else if (args[i].startsWith("Body:")) { 
       body = args[i].substring(5); // **I'm stuck here** 
     } 
    } 

這是我嘗試過和它的作品,除了身體好。因爲它給出的輸出「thisismessage」沒有空間。

我試着拆分它們。但不能解決。

我該怎麼辦?

我不希望改變命令行參數。

回答

0

我只希望身體的輸出只是:「this」,所以不知道爲什麼它是「thisismessage」。但是,也許你的程序這個「是」和「消息」是不同的論點。也許你最後否則,如果語句可能是這樣的:

else if (args[i].startsWith("Body:")) { 
    body = args[i].substring(5); // **I'm stuck here** 
    while(i < x) { 
     i++; 
     body += " " + args[i]; 
    } 
} 
1

你的身體信息中有空格,所以它會顯示爲多個參數。要傳遞一個空格參數,用引號括起來即

java myprog From:[email protected] To:[email protected] "Body:this is message" 
+0

我不應該改變命令行參數。這就是使它更復雜的原因。我應該提到這個問題。對不起 –

+0

然後如果你知道主體參數將是最後一個,你可以將其他參數附加到正文文本,方法是將它放在if-else語句的末尾:else {body = body +「」+ args [i] } – Egg

0

您確切地知道參數的模式和順序是什麼。你for環是多餘的,你可以這樣做:

String from = ars[0].substring(5); 
String to = args[1].substring(3); 
String body = args[2].substring(5); 

你應該爲了告訴大家,這是一個參數與"包裹的最後一個參數。

+0

我不應該改變命令行參數。這就是使它更復雜的原因。 –

+0

然後你應該手動迭代其餘的參數。 – Maroun

0

org.apache.commons.lang.StringUtils可以幫助你完成這項工作。

嘗試:

... 
} else if (args[i].startsWith("Body:")) { 
    body = StringUtils.join(Arrays.copyOfRange(args, i, args.length), " ") 
         .substring(5);