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
请注意,使用的正则表达式并不理想,但它们适用于您的情况。我使用数组是因为我认为这是一个严格的要求。您也可以使用更好的列表。快速而精彩的回答,谢谢。我在考虑使用列表而不是数组。快速而好的回答谢谢。我在考虑使用列表而不是数组。你是对的,使用列表更好,即使你