在 Java 中过滤掉命令行输入的符号
Filtering Symbols Out of Command Line Input in Java
我正在研究 Java 中的一个简单方法,我从输入中获取单个字符串,例如:
用户名@192.168.1.1:2531
我需要将用户名、ip address/host和端口[=25分开=] 分成三个不同的字符串。我目前的想法是通过一个循环标记 '@' 和 ' 的索引将整个输入转换为 char[], 运行 :' 占据。然后使用新字符串的偏移量构造函数为用户名、ip/host 和端口构造每个单独的字符串。
这是我的代码:
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);
}
}
`
对于这样的事情,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
您可以使用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
可以使用String的split方法class
String s = "username@192.168.1.1:2531";
String[] arr = s.split("@|:");
for (String str : arr) {
System.out.println(str);
}
我正在研究 Java 中的一个简单方法,我从输入中获取单个字符串,例如: 用户名@192.168.1.1:2531
我需要将用户名、ip address/host和端口[=25分开=] 分成三个不同的字符串。我目前的想法是通过一个循环标记 '@' 和 ' 的索引将整个输入转换为 char[], 运行 :' 占据。然后使用新字符串的偏移量构造函数为用户名、ip/host 和端口构造每个单独的字符串。
这是我的代码:
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);
}
}
`
对于这样的事情,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
您可以使用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
可以使用String的split方法class
String s = "username@192.168.1.1:2531";
String[] arr = s.split("@|:");
for (String str : arr) {
System.out.println(str);
}