java或正则表达式分割字符串

2024-12-18 02:01:17
推荐回答(5个)
回答1:

刚看了一下,有的回答只给思路,没具体做法。有的回答只是针对一种情况的。给你一个稍微通用点的吧,如果有问题再联系我。

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class StringAnalyze {
private Pattern p = Pattern.compile("\\([^)]*\\)");
private List result;

public void analyze(String content){
Matcher m = p.matcher(content);
if(m.find()){
String tmp = m.group();
tmp = tmp.substring(1, tmp.length() - 1);
String pre = content.substring(0, m.start());
String suf = content.substring(m.end());
String[] sp = tmp.split("\\|");
for(String s : sp){
analyze(pre + s + suf);
}
}else{
result.add(content);
}
}
public String[] getNeedStrings(String content){
result = new ArrayList();
analyze(content);
return result.toArray(new String[1]);
}
public static void main(String[] args) {
StringAnalyze sa = new StringAnalyze();
for(String s : sa.getNeedStrings("a1.asdf.(asfd1|fjdk):aa")){
System.out.println(s);
}
System.out.println("----------------------");
for(String s : sa.getNeedStrings("a1.asdf.(asfd1|fjdk):(aa|bb|cc)")){
System.out.println(s);
}
System.out.println("----------------------");
for(String s : sa.getNeedStrings("a1.asdf.(asfd1|fjdk):(aa|bb|cc):(ee|ff)")){
System.out.println(s);
}
}
}

回答2:

List result = new ArrayList();
String splitStr = "a1.asdf.(asfd1|fjdk):(aa|bb|cc)";     
//正则表达式  
String reg = "([^\\(]+?)\\(([^\\)]+?)\\):\\(([^\\)]+?)\\)";           
Pattern pt = Pattern.compile(reg);
Matcher mt=pt.matcher(splitStr);
if(mt.find())
{
    String str1 = mt.group(1);
    String str2 = mt.group(2);
    String str3 = mt.group(3);
    for(String tmp : str2.split("\\|")) {
        for(String tmp2 : str3.split("\\|")) {
            String res = str1+""+tmp+":"+tmp2;
            result.add(res);
    }
    }
}
return result.toArray();                //返回字符串数组

回答3:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.print.attribute.standard.Sides;

/**
 * 字符串分割
 * 从键盘输入字符串,然后按要求分割
 * 此处对输入的字符串格式未作判断,所以程序在输入的字符串格式正确的前提下下才能正    常运行
 * @author
 */
public class Test {
public static void main(String[] args) {
/**
 * 用list来存放分割好的字符串,因为list的大小可以动态变化
 */
List list = new ArrayList();
//从键盘获取字符串
System.out.println("输入需要截取的字符串:");
Scanner is = new Scanner(System.in);
String st = is.nextLine();
//第一次分割,从:开始截成两段
String[]s1=st.split(":");
//第二次分割,将第一次分割的第一段从(开始截成两段
String[]s4=s1[0].split("\\(");
//第三次分割,将第一个括号里的字符串分割出来,存到s2里
String[]s2=s4[1].substring(0, s4[1].length()-1).split("\\|");
//第四次分割,将第二个括号里的字符串分割出来,存到s3里
String[]s3=s1[1].substring(1, s1[1].length()-1).split("\\|");
//开始拼接字符串
//s2与s3长度决定了谁是第一个循环
if (s2.length>=s3.length) {
for (int i = 0; i < s2.length; i++) {
for (int j = 0; j < s3.length; j++) {
list.add(s4[0]+s2[i]+":"+s3[j]);
}
}
}else {
for (int i = 0; i < s3.length; i++) {
for (int j = 0; j < s2.length; j++) {
list.add(s4[0]+s2[j]+":"+s3[i]);
}
}
}
//定义一个新的String数组来存放分割好的字符串
String[]strr=new String[list.size()];
for (int k = 0; k < strr.length; k++) {
//从list拿出来放到strr中
strr[k]=list.get(k).toString();
System.out.println(strr[k]);
}
}
}

回答4:

string有两个方法,一个是indexof()索引,一个是截取substring(),这两个搭配起来截取字符串几乎是万能的
你这种截取还有个split方法(貌似,具体是什么没环境记不太清了),他类似提取ip提取的方法,以char分割字符串并自动返回数组应该是最适合的

回答5:

不太会正则,表示split比较直观
string a ="a1.asdf.(asfd1|fjdk):aa";
string[] b=a.Split(new char[5]{’.’,’(’,’)’,'|',':'});
string c1=b[0]+'.'+b[1]+'.'+b[2]+'.'+b[4]; 你要的第一个值
string c2=b[0]+'.'+ b[1]+'.'+ b[3]+'.'+ b[4];
其他的同理