废话不说了,
文件:
A{1,2,3,4,5,6}
B{7,4,5,6,8}
C{2,3,12,14,4,11}
测试时输入到控制台的字符串为:
C+B-(A*(C-A))+B
结果:
2 3 12 14 4 11 7 8 1 5 6
自己算了一下,是正确的!
代码如下,注释也写的蛮多的:
-
- packagecom.lim.test;
- importjava.io.BufferedReader;
- importjava.io.FileInputStream;
- importjava.io.IOException;
- importjava.io.InputStreamReader;
- importjava.lang.reflect.InvocationTargetException;
- importjava.lang.reflect.Method;
- importjava.util.ArrayList;
- importjava.util.List;
- importjava.util.Stack;
-
-
-
publicclassEditorStringV2{
-
-
privateTypetypeA=null;
-
-
privateTypetypeB=null;
-
-
privateTypetypeC=null;
-
privateStackstack=newStack();
-
publicEditorStringV2(Stringpath){
- readFile(path);
- }
-
-
-
privatevoidreadFile(Stringpath){
-
BufferedReaderreader=null;
-
try{
-
reader=newBufferedReader(newInputStreamReader(
-
newFileInputStream(path)));
-
Stringstr=null;
-
-
while((str=reader.readLine())!=null){
-
-
if(str.substring(0,1).equals("A")){
-
typeA=newType(str);
- }
-
-
elseif(str.substring(0,1).equals("B")){
-
typeB=newType(str);
- }
-
-
elseif(str.substring(0,1).equals("C")){
-
typeC=newType(str);
-
}else{
-
System.out.println("nosuchtype!");
-
return;
- }
- }
-
}catch(Exceptione){
- e.printStackTrace();
-
return;
- }
- }
-
-
-
publicStackdisplayResult(StackorgStack)throwsSecurityException,
- IllegalArgumentException,NoSuchMethodException,
- IllegalAccessException,InvocationTargetException{
-
-
intleftBracket=0;
-
-
booleanhasOpe=false;
-
-
intlength=orgStack.size();
-
Objectobj=null;
-
if(length<3){
-
System.out.println("inputruleisillegal.");
-
returnnull;
-
}else{
-
for(inti=0;i<length;i++){
-
- obj=orgStack.pop();
-
-
if(isLeftBracket(obj)){
- leftBracket+=1;
- stack.push(obj);
-
continue;
- }
-
-
if(isOperator(obj)){
-
hasOpe=true;
- stack.push(obj);
-
continue;
- }
-
- stack.push(obj);
-
-
if(leftBracket>0&&isRightBracket(obj)){
-
- stack.pop();
-
- Typearg=(Type)stack.pop();
-
- Stringope=stack.pop().toString();
-
- TypeinvokeObj=(Type)stack.pop();
-
- TypetypeTmp=execute(invokeObj,ope,arg);
-
- stack.pop();
-
- leftBracket-=1;
-
- stack.push(typeTmp);
-
-
if(stack.size()>2){
-
StacktmpStack=newStack();
-
while(stack.size()>0){
- tmpStack.push(stack.pop());
- }
- stack=displayResult(tmpStack);
- }
-
continue;
- }
-
-
-
if(leftBracket==0&&hasOpe&&isType(obj)){
-
- Typearg=(Type)stack.pop();
-
- Stringope=stack.pop().toString();
-
- TypeinvokeObj=(Type)stack.pop();
-
- TypetypeTmp=execute(invokeObj,ope,arg);
-
- stack.push(typeTmp);
-
-
hasOpe=false;
-
-
if(stack.size()>2){
-
StacktmpStack=newStack();
-
while(stack.size()>0){
- tmpStack.push(stack.pop());
- }
- stack=displayResult(tmpStack);
- }
-
continue;
- }
- }
-
-
returnstack;
- }
- }
-
-
-
privatebooleanisType(Objecto){
-
returnoinstanceofType;
- }
-
-
-
privatebooleanisOperator(Objecto){
-
return!isType(o)&&((String)o).matches("[+//*-]");
- }
-
-
-
privatebooleanisLeftBracket(Objecto){
-
return!isType(o)&&((String)o).equals("(");
- }
-
-
-
privatebooleanisRightBracket(Objecto){
-
return!isType(o)&&((String)o).equals(")");
- }
-
-
-
privateTypeexecute(Typeobj,Stringope,Typearg)
- throwsSecurityException,NoSuchMethodException,
- IllegalArgumentException,IllegalAccessException,
- InvocationTargetException{
- Classc=obj.getClass();
-
Class[]args=newClass[1];
- args[0]=arg.getClass();
-
Methodm=null;
-
-
if(ope.equals("+")){
-
m=c.getMethod("bing",args);
- }
-
-
elseif(ope.equals("*")){
-
m=c.getMethod("jiao",args);
- }
-
-
elseif(ope.equals("-")){
-
m=c.getMethod("cha",args);
-
}else{
-
System.out.println("NoSuchMethod");
-
returnnull;
- }
-
return(Type)m.invoke(obj,newObject[]{arg});
- }
-
-
-
privateStackreadInput(){
-
Stackret=newStack();
-
Stringstr=null;
-
Stringo=null;
-
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
-
try{
- str=br.readLine();
-
}catch(IOExceptione){
- e.printStackTrace();
-
returnnull;
- }
-
for(inti=str.length();i>0;i--){
- o=str.substring(i-1,i);
-
-
if(o.matches("[ABC]")){
- ret.push(typeFactory(o));
-
continue;
- }
- ret.push(o);
- }
-
returnret;
- }
-
-
-
privateTypetypeFactory(Stringtype){
-
if(type.equals("A")){
-
returnnewType(typeA.getArray());
-
}elseif(type.equals("B")){
-
returnnewType(typeB.getArray());
-
}elseif(type.equals("C")){
-
returnnewType(typeC.getArray());
-
}else{
-
returnnull;
- }
- }
-
-
-
classType{
-
-
privateListarray=newArrayList();
-
publicType(Stringsrt){
-
this.array=createList(srt);
- }
-
publicType(Listlist){
-
this.array.addAll(list);
- }
-
publicListgetArray(){
-
returnthis.array;
- }
-
-
-
publicTypebing(Typearg){
-
-
booleanadd=true;
-
- Listlist=arg.getArray();
-
-
for(inti=0;i<list.size();i++){
-
add=true;
-
-
for(intj=0;j<array.size();j++){
-
if(((Integer)list.get(i)).intValue()==((Integer)array
-
.get(j)).intValue()){
-
add=false;
- }
- }
-
if(add){
-
array.add(list.get(i));
- }
- }
-
-
returnnewType(array);
- }
-
-
-
publicTypejiao(Typearg){
-
-
booleanadd=false;
-
-
Listret=newArrayList();
-
- Listlist=arg.getArray();
-
-
for(inti=0;i<list.size();i++){
-
add=false;
-
-
for(intj=0;j<array.size();j++){
-
if(((Integer)list.get(i)).intValue()==((Integer)array
-
.get(j)).intValue()){
-
add=true;
- }
- }
-
if(add){
-
ret.add(list.get(i));
- }
- }
-
-
returnnewType(ret);
- }
-
-
-
publicTypecha(Typearg){
-
-
booleanadd=true;
-
- Listlist=arg.getArray();
-
-
for(inti=0;i<list.size();i++){
-
add=true;
-
-
for(intj=0;j<array.size();j++){
-
if(((Integer)list.get(i)).intValue()==((Integer)array
-
.get(j)).intValue()){
-
add=false;
-
- array.remove(j);
- }
- }
-
if(add){
-
array.add(list.get(i));
- }
- }
-
-
returnnewType(array);
- }
-
-
-
privateListcreateList(Stringstr){
-
-
Strings[]=str.replaceAll(str.substring(0,1),"").replace("{",
-
"").replace("}","").split(",");
-
Listlist=newArrayList();
-
for(inti=0;i<s.length;i++){
-
list.add(newInteger(s[i]));
- }
-
returnlist;
- }
- }
-
-
-
publicstaticvoidmain(Stringargs[])throwsSecurityException,
- IllegalArgumentException,NoSuchMethodException,
- IllegalAccessException,InvocationTargetException{
-
EditorStringV2es=newEditorStringV2("input.txt");
- Stacks=es.readInput();
-
Stackresult=es.displayResult(s);
- Listlist=((Type)result.pop()).getArray();
-
System.out.println("操作运算后结果为:");
-
for(inti=0;i<list.size();i++)
-
System.out.print(list.get(i)+"");
- }
- }
分享到:
相关推荐
本篇文章将深入探讨如何使用C++实现Bad Character Rule(坏字符规则)和Good Suffix Rule(好后缀规则)来优化Boyer-Moore(BM)字符串匹配算法。BM算法以其高效的性能在文本搜索、数据挖掘等多个领域广泛应用。 ...
Hyperledger Fabric make: *** No rule to make target问题 最近一段时间,改Fabric代码,发现没法编译了!make总是报找不到target! ➜ fabric git:(master) ✗ make configtxgen make: *** No rule to make target ...
那么一段长度为N的字符串,按照存储的ASCII码可以表示为一串如下的字符串(不包含[]) "x .. x][x .. x y x .. x][x .. x", 其中 s,e表示当前正在分析的一段子串(0, 下标e-s = 期望的分割长度cut_size) ^ ^ ^ ^ ^ 0...
这种运算方法通过取两个模糊集的最小隶属度来计算结果模糊集的隶属度,从而实现从输入模糊集到输出模糊集的转换。 模糊蕴含关系可以理解为“如果A,则B”的形式,其中A和B是模糊集合。在最小运算中,对于任意模糊...
本文将深入探讨如何利用Python内置的`split()`方法来实现字符串的完美拆分,并通过一个具体示例进行详细讲解。 #### 一、`split()` 方法简介 `split()` 是Python字符串的一个内置方法,用于根据指定的分隔符将字符...
例如,我们可以编写一个函数,接收输入信号和差分数作为参数,输出微分结果。对于积分,我们可以创建一个递归或循环结构,逐步累加各个小段的贡献。 在"weijifen.txt"文件中,很可能是包含了某个具体信号的离散值...
这款插件的核心功能是提供了一种方式,让用户能够根据预设的规则来重定向、拦截或者修改网页的URL,从而实现特定的浏览体验优化或自动化操作。 在实际应用中,URL rule插件可以有以下几方面的用途: 1. **网址过滤...
### Drools从字符串中动态加载规则 在使用Drools规则引擎时,...综上所述,通过从字符串中动态加载规则的方式,我们可以更加灵活高效地管理和使用Drools规则引擎,这对于需要快速迭代业务逻辑的应用场景来说尤为重要。
Rule的使用非常简单,只需在测试类中声明一个Rule字段,并在需要应用该规则的方法上使用`@Rule`注解。例如,JUnit自带的`ExpectedException` Rule可以帮助我们捕获和验证预期的异常: ```java import org.junit....
在此背景下,Boyer和Moore于1977年提出了一种革命性的字符串匹配算法——Boyer-Moore算法,该算法不仅在理论上具有线性时间复杂度的优势,在实际应用中也展现出极高的效率,尤其是在处理长文本和模式时。随后,R....
Boyer-Moore 算法是一种广泛使用的字符串匹配算法,它通过预处理模式串(即被查找的字符串)并利用两个规则(bad character rule 和 good suffix rule)来减少比较次数,从而提高搜索效率。 #### Boyer-Moore 算法...
Skope-Rule 模块详解 Skope-Rule 模块是 Python 中的一个重要的机器学习模块,用于处理分类问题,特别是异常检测和规则分类器。下面将对 Skope-Rule 模块进行详细的介绍,包括其原理、算法和应用。 Flash 原理 ...
当模式串中的某个字符与文本串不匹配时,我们可以根据模式串中该字符的位置和文本串中对应位置的字符来确定一个跳跃步长。这个步长通常是文本串中坏字符(即不匹配的字符)在模式串中的索引减去坏字符在文本串中的...
Rule34.xxx API包装器 这是一个简单的模块,用于简化异步访问rule34.xxx API的过程 为了帮助机器人开发人员,该包装器根本不使用requests 。 相反,它使用aiohttp。 为了帮助异步编码人员,提供了一个名为Sync的类,...
运算放大器的设计需要考虑到许多参数,包括增益、电源电压、功耗、带宽、电路面积、噪声、失真、输入输等,需要从设计目标到版图设计的优化路径,严格按照设计程序进行电路仿真并通过版图验证和后仿真。
在Laravel中,验证是通过`Validator`类进行的,它可以接收一个表单请求,并根据预定义的规则检查输入数据的有效性。规则通常是字符串,比如`'required'`、`'email'`或`'numeric'`,也可以是自定义闭包函数。Rule ...
Design Rule 相关介绍本篇介绍的design rule只针对CMOS技术。画版图时需要按design rule的要求来操作,所以也就有我们常提到的DRC(design rule check),对设计规则的检测工作。Design rule根据工艺,工厂设备,...