我正在使用Java中的一个简单方法,我从输入中获取单个字符串,例如: username@192.168.1.1:2531
我需要将用户名, ip地址/主机和端口分成三个不同的字符串。我目前的想法是将整个输入转换为char [],通过循环标记' @' 和' :' 占据。然后使用偏移构造函数为新的String构造用户名,ip / host和port的每个单独的字符串。
这是我的代码:
import java.io.*;
public class StringSymbolParse {
public static void main(String[] args){
String uname;
String host;
int port; //uname@ip:host
String total = args[0];
System.out.println("Input: " + args[0]);
char totalChar[] = total.toCharArray();
int size = totalChar.length;
int markerAt = 0; //marks last filtered symbol placement;
int markerColon = 0;
for(int i=0; i<size; i++){
if((totalChar[i] == '@')){
markerAt = i;
}
else if(totalChar[i] == ':'){
markerColon = i;
}
}
System.out.println("MarkerAT: " + markerAt);
System.out.println("MarkerColon: " + markerColon);
uname = new String(totalChar,0,(markerAt));
System.out.println("Username: " + uname);
host = new String(totalChar, 8, );
port = Integer.parseInt(new String(totalChar, (markerColon), size));
System.out.println("Username: " + uname);
System.out.println("Host: " + host);
System.out.println("Port: " + port);
}
}
`
答案 0 :(得分:3)
您可以使用String类的split方法
String s = "username@192.168.1.1:2531";
String[] arr = s.split("@|:");
for (String str : arr) {
System.out.println(str);
}
答案 1 :(得分:2)
对于类似的事情,regular expression是你的朋友。
String text = "username@192.168.1.1:2531";
Matcher m = Pattern.compile("([^@]*)@([^:@]*):(.*)").matcher(text);
if (m.matches()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
输出
username
192.168.1.1
2531
答案 2 :(得分:1)
您可以使用String.split()
方法。
String s = "username@192.168.1.1:2531";
String[] arr = s.split("@");
String username = arr[0];
String ipAdd = arr[1].split(":")[0];
String port = arr[1].split(":")[1];
System.out.println("Username : " + username);
System.out.println("IP address : " + ipAdd);
System.out.println("Port : " + port);
<强>输出:强>
Username : username
IP address : 192.168.1.1
Port : 2531