在 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);
        }