刚看了一下,有的回答只给思路,没具体做法。有的回答只是针对一种情况的。给你一个稍微通用点的吧,如果有问题再联系我。
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 Listresult;
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);
}
}
}
Listresult = 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(); //返回字符串数组
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]);
}
}
}
string有两个方法,一个是indexof()索引,一个是截取substring(),这两个搭配起来截取字符串几乎是万能的
你这种截取还有个split方法(貌似,具体是什么没环境记不太清了),他类似提取ip提取的方法,以char分割字符串并自动返回数组应该是最适合的
不太会正则,表示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];
其他的同理