Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式将字符串拆分为不同类型的数组_Java_Arrays_String - Fatal编程技术网

Java 使用正则表达式将字符串拆分为不同类型的数组

Java 使用正则表达式将字符串拆分为不同类型的数组,java,arrays,string,Java,Arrays,String,将字符串放入不同类型的数组中最简单、最有效的方法是什么?例如: String[] textArr; String[] numbersArr; 如果可能的话,一个String[]doubleArr和一个String[]dateArrayz //the string I want to split String splitMe = "Tinus has 99 issues and has to pay $2200.50 for 26 on 2016/10/10"; 在它分裂之后,它应该是 S

将字符串放入不同类型的数组中最简单、最有效的方法是什么?例如:

String[] textArr; 
String[] numbersArr; 
如果可能的话,一个
String[]doubleArr
和一个
String[]dateArray
z

//the string I want to split
String splitMe = "Tinus has 99 issues and has to pay $2200.50 for 26 on 2016/10/10";
在它分裂之后,它应该是

String[] textArr = ["Tinus","has","issues","and","to","pay","for","on"]; 
String[] numbersArr = ["99","26"];
String[] doubleArr = ["2200.50"];
String[] dateArr = ["2016/10/10"];

我可能会选择按空格分割输入字符串,然后使用模式匹配检查每个条目以确定其所属位置:

String splitMe = "Tinus has 99 issues and has to pay $2200.50 for 26 on 2016/10/10";
String[] parts = splitMe.split(" ");
List<String> textList = new ArrayList<>();
List<String> numbersList = new ArrayList<>();
List<String> currencyList = new ArrayList<>();
List<String> dateList = new ArrayList<>();

for (String part : parts) {
    if (part.matches("\\d*")) {
        numbersList.add(part);
    }
    else if (part.matches("\\$\\d*\\.\\d*")) {
        currencyList.add(part);
    }
    else if (part.matches("\\d{4}/\\d{2}/\\d{2}")) {
        dateList.add(part);
    }
    else {
        textList.add(part);
    }
}
String splitMe=“Tinus发行了99期,必须在2016/10/10为26期支付2200.50美元”;
String[]parts=splitMe.split(“”);
List textList=new ArrayList();
List numbersList=newarraylist();
List currencyList=新建ArrayList();
List dateList=new ArrayList();
用于(字符串部分:部分){
如果(部分匹配(\\d*)){
编号列表。添加(部分);
}
else if(part.matches(“\\$\\d*\\.\\d*”){
货币列表。添加(部分);
}
else if(part.matches(“\\d{4}/\\d{2}/\\d{2}”)){
添加(部分);
}
否则{
textList.add(部分);
}
}

我没有试图从货币中正式提取双倍。我还选择使用列表而不是数组来存储各种术语,因为这样可以更好地扩展。我将让您填写详细信息。

我可能会选择只按空格分割输入字符串,然后使用模式匹配检查每个条目,以确定其所属位置:

String splitMe = "Tinus has 99 issues and has to pay $2200.50 for 26 on 2016/10/10";
String[] parts = splitMe.split(" ");
List<String> textList = new ArrayList<>();
List<String> numbersList = new ArrayList<>();
List<String> currencyList = new ArrayList<>();
List<String> dateList = new ArrayList<>();

for (String part : parts) {
    if (part.matches("\\d*")) {
        numbersList.add(part);
    }
    else if (part.matches("\\$\\d*\\.\\d*")) {
        currencyList.add(part);
    }
    else if (part.matches("\\d{4}/\\d{2}/\\d{2}")) {
        dateList.add(part);
    }
    else {
        textList.add(part);
    }
}
String splitMe=“Tinus发行了99期,必须在2016/10/10为26期支付2200.50美元”;
String[]parts=splitMe.split(“”);
List textList=new ArrayList();
List numbersList=newarraylist();
List currencyList=新建ArrayList();
List dateList=new ArrayList();
用于(字符串部分:部分){
如果(部分匹配(\\d*)){
编号列表。添加(部分);
}
else if(part.matches(“\\$\\d*\\.\\d*”){
货币列表。添加(部分);
}
else if(part.matches(“\\d{4}/\\d{2}/\\d{2}”)){
添加(部分);
}
否则{
textList.add(部分);
}
}

我没有试图从货币中正式提取双倍。我还选择使用列表而不是数组来存储各种术语,因为这样可以更好地扩展。我将由您填写详细信息。

您可以尝试以下方法:

String splitMe = "Tinus has 99 issues and has to pay $2200.50 for 26 on 2016/10/10";


String[] splitArray = splitMe.split(" ");
System.out.println("splitArray: " + Arrays.toString(splitArray));

String[] tmp = new String[splitArray.length];        

int i = 0;
for (String s : splitArray) {
    if (s.matches("[A-Za-z]+")) {
        tmp[i] = s;
        i++;
    }         
}     

String[] textArr = new String[i];
for (int j = 0; j < textArr.length; j++) {
    textArr[j] = tmp[j];
}

tmp = new String[splitArray.length];

i = 0;
for (String s : splitArray) {
    if (s.matches("[0-9]+")) {
        tmp[i] = s;
        i++;
    } 
}

String[] numbersArr = new String[i];
for (int j = 0; j < numbersArr.length; j++) {
    numbersArr[j] = tmp[j];
}

tmp = new String[splitArray.length];

i = 0;
for (String s : splitArray) {
    if (s.matches("\\$[0-9]+\\.[0-9]+")) {
        tmp[i] = s;
        i++;
    } 
}

String[] doubleArr = new String[i];
for (int j = 0; j < doubleArr.length; j++) {
    doubleArr[j] = tmp[j];
}

tmp = new String[splitArray.length];

i = 0;
for (String s : splitArray) {
    if (s.matches("[0-9]+/[0-9]+/[0-9]+")) {
        tmp[i] = s;
        i++;
    }
}

String[] dateArr = new String[i];
for (int j = 0; j < dateArr.length; j++) {
    dateArr[j] = tmp[j];
}

System.out.println("textArr: " + Arrays.toString(textArr));
System.out.println("numbersArr: " + Arrays.toString(numbersArr));
System.out.println("doubleArr: " + Arrays.toString(doubleArr));
System.out.println("dateArr: " + Arrays.toString(dateArr));
String splitMe=“Tinus发行了99期,必须在2016/10/10为26期支付2200.50美元”;
String[]splitArray=splitMe.split(“”);
System.out.println(“splitArray:+Arrays.toString(splitArray));
String[]tmp=新字符串[splitArray.length];
int i=0;
for(字符串s:splitArray){
如果(s.匹配(“[A-Za-z]+”){
tmp[i]=s;
i++;
}         
}     
字符串[]textArr=新字符串[i];
对于(int j=0;j

请注意,使用的正则表达式并不理想,但它们适用于您的情况。我使用数组是因为我认为这是一个严格的要求。您还可以使用更好的列表。

您可以尝试以下方法:

String splitMe = "Tinus has 99 issues and has to pay $2200.50 for 26 on 2016/10/10";


String[] splitArray = splitMe.split(" ");
System.out.println("splitArray: " + Arrays.toString(splitArray));

String[] tmp = new String[splitArray.length];        

int i = 0;
for (String s : splitArray) {
    if (s.matches("[A-Za-z]+")) {
        tmp[i] = s;
        i++;
    }         
}     

String[] textArr = new String[i];
for (int j = 0; j < textArr.length; j++) {
    textArr[j] = tmp[j];
}

tmp = new String[splitArray.length];

i = 0;
for (String s : splitArray) {
    if (s.matches("[0-9]+")) {
        tmp[i] = s;
        i++;
    } 
}

String[] numbersArr = new String[i];
for (int j = 0; j < numbersArr.length; j++) {
    numbersArr[j] = tmp[j];
}

tmp = new String[splitArray.length];

i = 0;
for (String s : splitArray) {
    if (s.matches("\\$[0-9]+\\.[0-9]+")) {
        tmp[i] = s;
        i++;
    } 
}

String[] doubleArr = new String[i];
for (int j = 0; j < doubleArr.length; j++) {
    doubleArr[j] = tmp[j];
}

tmp = new String[splitArray.length];

i = 0;
for (String s : splitArray) {
    if (s.matches("[0-9]+/[0-9]+/[0-9]+")) {
        tmp[i] = s;
        i++;
    }
}

String[] dateArr = new String[i];
for (int j = 0; j < dateArr.length; j++) {
    dateArr[j] = tmp[j];
}

System.out.println("textArr: " + Arrays.toString(textArr));
System.out.println("numbersArr: " + Arrays.toString(numbersArr));
System.out.println("doubleArr: " + Arrays.toString(doubleArr));
System.out.println("dateArr: " + Arrays.toString(dateArr));
String splitMe=“Tinus发行了99期,必须在2016/10/10为26期支付2200.50美元”;
String[]splitArray=splitMe.split(“”);
System.out.println(“splitArray:+Arrays.toString(splitArray));
String[]tmp=新字符串[splitArray.length];
int i=0;
for(字符串s:splitArray){
如果(s.匹配(“[A-Za-z]+”){
tmp[i]=s;
i++;
}         
}     
字符串[]textArr=新字符串[i];
对于(int j=0;j

请注意,使用的正则表达式并不理想,但它们适用于您的情况。我使用数组是因为我认为这是一个严格的要求。您也可以使用更好的列表。

快速而精彩的回答,谢谢。我在考虑使用列表而不是数组。快速而好的回答谢谢。我在考虑使用列表而不是数组。你是对的,使用列表更好,即使你