有时候设计到list map 做交集,并集等操作。
可以参考加减法的实现
public class Test {
/**
* @param args
*/
public static final char y_all='+';
public static final char y_diff='-';
public static final char y_and='&'; // 不使用
// 思路是 通过运算符 拆分左右二边,然后左右2变进行运算 递归操作
public static void main(String[] args) {
String s = "((1+2)-(3-4))+((0+1)-(2-1))";
String s1 ="((10+2)-3)+(5-2)";
System.out.println(getall(s1));
}
public static int getall(String rel){
// 判断最小单位
if(rel.indexOf("(")==-1 && rel.indexOf(")")==-1 && rel.indexOf(y_all)==-1 && rel.indexOf(y_diff)==-1){
return getUser(rel);
}else{
String left = getLeft(rel);
System.out.println("left: "+left);
String right = getRight(rel);
System.out.println("right: "+right);
String op = getOP(rel);
System.out.println("op: "+op);
return Oper(getall(left), getall(right), op);
}
}
public static String getLeft(String rel){
int index=0;
int sub = getSub(rel, index);
String str = rel.substring(0,sub);
return clearK(str);
}
public static String getRight(String rel){
int index=0;
int sub = getSub(rel, index);
String str = rel.substring(sub+1);
return clearK(str);
}
public static String getOP(String rel){
int index=0;
int sub = getSub(rel, index);
String str = rel.substring(sub,sub+1);
return str;
}
public static int Oper(int left,int right,String op){
int tmp=0 ;
if(op.equals("+")){
tmp = left+right;
}else if(op.equals("-")){
tmp = left-right;
}else if(op.equals("&")){
//TODO:
}
return tmp;
}
public static int getUser(String rel){
int t =0;
if(null!=rel && !rel.isEmpty()){
t = Integer.parseInt(rel);
}
return t;
}
public static String clearK( String rel ) {
if(rel.startsWith("(") && rel.endsWith(")")){
rel = rel.substring(1,rel.length()-1);
}
return rel;
}
private static int getSub(String rel, int index) {
int sub =0;
char[] clt = rel.toCharArray();
for(int i=0;i<clt.length;i++){
char c = clt[i];
if(c=='('){
index++;
}
if(c==')'){
index--;
}
if(c==y_all){
if(index==0){
sub = i ;
break;
}
}
if(c==y_diff){
if(index==0){
sub = i ;
break;
}
}
if(c==y_and){
if(index==0){
sub = i ;
break;
}
}
}
return sub;
}
}
分享到:
相关推荐
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...
java递归树型结构通用数据库
Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE...
java递归算法,java递归算法,java递归算法
Java递归将List转为树形结构 博客地址:https://blog.csdn.net/weixin_38500202/article/details/110456363
java递归小例子,供初学者学习使用。九九递归
Java递归例子.doc
Java递归读取文件例子 Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */
网上绝大部分java递归实现字符串反转缺少字符串判空条件,我加了上去。
用递归的方法实现九宫格的初始化,可加深对二维数组传递参数的理解.
这里应用java递归实现了一个无限层级的树,包含层级&是否叶子节点,可以很好的为ztree,dtree,ztree准备后台数据,喜欢的朋友可以下载学习!
java:用递归方法删除文件
java 递归 删除,java 递归 删除,Java语言描述递归删除
java递归的排序和查找 不错的 大家可以来下载
JAVA递归实现全排列算法,含实现源代码,如a、b、c、d的全排列为: abcd abdc acbd acdb adcb adbc bacd badc bcad bcda bdca bdac cbad cbda cabd cadb cdab cdba dbca dbac dcba dcab dacb dabc
java 内的递归问题极其练习代码,比较全面的讲述了递归问题,希望不太熟悉此部分的可以通过此文档懂得理解递归。
java代码-使用Java递归求和1+2+3+...+n的源代码 ——学习参考资料:仅用于个人学习使用!
递归 冒泡 长整型加法 空心菱形 空心方形 用java 写的一些常用而且 基础的东西。 如果有人想跟我探讨长整型乘法 和 空心菱形 最简单代码 本人都有方法
本段代码主要是使用Java编写的递归获取指定路径下获取匹配后缀文件列表程序,可以做出多种扩展。如有疑问,可以留言,欢迎下载和支持。 本段代码主要是使用Java编写的递归获取指定路径下获取匹配后缀文件列表程序,可以...