怎样取得这个方程的系数 让用户输入一个字符串“2x^3+1.1x^2+0.9x-1.4=0”方程,怎样截取这四个系数(包括常数项)啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Test { public static void main(String[]args){ String str="2x^3+1.1x^2+0.9x-1.4=0"; for(int i=0,j=0,k=str.length();i<k;i++){ String s=String.valueOf(str.charAt(i)); if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){ j=i+1; }else if(s.equals("x")||s.equals("=")){ System.out.println(str.substring(j,i)); } }}}这个基本能实现你的要求,你试试。 try { String regex = "(.+)x\\^3[\\s]*[+\\-][\\s]*(.+)x\\^2[\\s]*[+\\-][\\s]*(.+)x[\\s]*[+\\-][\\s]*(.+)[\\s]*=.*"; String sourceString = "2x^3+1.1x^2+0.9x-1.4=0"; Matcher matcher = Pattern.compile(regex).matcher(sourceString);// if(matcher.matches()){ ; double a = Double.parseDouble(matcher.group(1)); double b = Double.parseDouble(matcher.group(2)); double c = Double.parseDouble(matcher.group(3)); double d = Double.parseDouble(matcher.group(4)); System.out.println(a + " " + b + " " + c + " " + d); } }catch (Exception e) { throw new Exception("输入错误"); } 这种简易方法只能适用于“标准方程”,你可以稍微,修改以下。 try { String sourceString = "2x^3 - 1.1x^2+ 0.9x-1.4=0"; System.out.println(sourceString); sourceString = sourceString.replaceAll("\\s", "");//先将式子中的空白符消除 System.out.println(sourceString); //然后扫描它,如果缺少x3 就补 +0x^3, //如果缺少x2 就补 +0x^2, //如果缺少x 就补 +0^x, //如果缺少常数 就补+0, //同时维持顺序,总之要保证“标准的”,下面的步骤才能顺利执行 if(sourceString.indexOf("x^3") == -1){ sourceString = "+0x^3" + sourceString; } if(sourceString.indexOf("x^2") == -1){ int pos = sourceString.indexOf("x^3") ; sourceString = sourceString.substring(0,pos+3)+"+0x^2" + sourceString.substring(pos+3); } if(sourceString.lastIndexOf("x") == sourceString.indexOf("x^2")){ int pos = sourceString.indexOf("x^2") ; sourceString = sourceString.substring(0,pos+3)+"+0x" + sourceString.substring(pos+3); } if(sourceString.lastIndexOf("x") +1 == sourceString.indexOf("=")){ int pos = sourceString.lastIndexOf("x") ; sourceString = sourceString.substring(0,pos+1)+"+0" + sourceString.substring(pos+1); } String regex = "^(.+)x\\^3(.+)x\\^2(.+)x(.+)=0$";//这里只有提取功能,还无法进行验证 Matcher matcher = Pattern.compile(regex).matcher(sourceString);// if(matcher.matches()){ ; double a = Double.parseDouble(matcher.group(1));//如果系数>0 自动会将+去除 double b = Double.parseDouble(matcher.group(2));//如果系数不是常数,她是一个表达式 double c = Double.parseDouble(matcher.group(3));//比如系数是(3y + 4z) 此时应该进行更复杂的处理 double d = Double.parseDouble(matcher.group(4)); System.out.println(a + " " + b + " " + c + " " + d); } }catch (Exception e) { throw new Exception("输入错误"); } jar包拷贝到别的地方就不能运行了? jsp点击连接问题 菜鸟问题~关于数据库的链接 真的很菜的 快来抢分吧! sso问题 如何用java代码设置IE的代理服务 使用C++对文字GZIP压缩, 是否可以在JAVA成功解压呢? 请在职java程序员谈谈 用SAXParser解析XML 请问如何在linux 下自动启动一个java程序 在线等待,高分求救对话框的小问题 这是think in java中的一个例子,类LibTest.java经调试可通过编译,不可执行,不知为何,恳请大家指点 求助,没搞明白怎么就是空值了
public static void main(String[]args){
String str="2x^3+1.1x^2+0.9x-1.4=0";
for(int i=0,j=0,k=str.length();i<k;i++){
String s=String.valueOf(str.charAt(i));
if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){
j=i+1;
}else if(s.equals("x")||s.equals("=")){
System.out.println(str.substring(j,i));
}
}
}
}
这个基本能实现你的要求,你试试。
try {
String regex = "(.+)x\\^3[\\s]*[+\\-][\\s]*(.+)x\\^2[\\s]*[+\\-][\\s]*(.+)x[\\s]*[+\\-][\\s]*(.+)[\\s]*=.*";
String sourceString = "2x^3+1.1x^2+0.9x-1.4=0";
Matcher matcher = Pattern.compile(regex).matcher(sourceString);//
if(matcher.matches()){ ;
double a = Double.parseDouble(matcher.group(1));
double b = Double.parseDouble(matcher.group(2));
double c = Double.parseDouble(matcher.group(3));
double d = Double.parseDouble(matcher.group(4));
System.out.println(a + " " + b + " " + c + " " + d);
}
}catch (Exception e) {
throw new Exception("输入错误");
}
try {
String sourceString = "2x^3 - 1.1x^2+ 0.9x-1.4=0";
System.out.println(sourceString);
sourceString = sourceString.replaceAll("\\s", "");//先将式子中的空白符消除
System.out.println(sourceString);
//然后扫描它,如果缺少x3 就补 +0x^3,
//如果缺少x2 就补 +0x^2,
//如果缺少x 就补 +0^x,
//如果缺少常数 就补+0,
//同时维持顺序,总之要保证“标准的”,下面的步骤才能顺利执行
if(sourceString.indexOf("x^3") == -1){
sourceString = "+0x^3" + sourceString;
}
if(sourceString.indexOf("x^2") == -1){
int pos = sourceString.indexOf("x^3") ;
sourceString = sourceString.substring(0,pos+3)+"+0x^2" + sourceString.substring(pos+3);
}
if(sourceString.lastIndexOf("x") == sourceString.indexOf("x^2")){
int pos = sourceString.indexOf("x^2") ;
sourceString = sourceString.substring(0,pos+3)+"+0x" + sourceString.substring(pos+3);
}
if(sourceString.lastIndexOf("x") +1 == sourceString.indexOf("=")){
int pos = sourceString.lastIndexOf("x") ;
sourceString = sourceString.substring(0,pos+1)+"+0" + sourceString.substring(pos+1);
}
String regex = "^(.+)x\\^3(.+)x\\^2(.+)x(.+)=0$";//这里只有提取功能,还无法进行验证
Matcher matcher = Pattern.compile(regex).matcher(sourceString);//
if(matcher.matches()){ ;
double a = Double.parseDouble(matcher.group(1));//如果系数>0 自动会将+去除
double b = Double.parseDouble(matcher.group(2));//如果系数不是常数,她是一个表达式
double c = Double.parseDouble(matcher.group(3));//比如系数是(3y + 4z) 此时应该进行更复杂的处理
double d = Double.parseDouble(matcher.group(4));
System.out.println(a + " " + b + " " + c + " " + d); } }catch (Exception e) {
throw new Exception("输入错误");
}