本周我们迎来第一项任务,java面向对象之实现对一串字符的匹配以及构造出计算的多项式,最终得出计算的结果。简而言之,可以用以下的要求来看题目:

  1. 输入的多项式字符串中不得出现非法字符
  2. 多项式的输入型式,{多项式 1}+{多项 式 2}-…… +{多项式 n},多项式内部格式为{(c1,n1),(c2,n2),…,(cm,nm)}
  3. 其中多项式的输入个数不得超过20个,同时多项式的内部数据的对数不会超过50对
  4. 输入中的所有空格应该被过滤掉
  5. 在本次编程过中, 对 于数(c,n),c为系数, 有-10^6<c<10^6(即 c前面可以 有‘ -’) , n为幂, 有 0<=n<10^6,即 c最大为 6位十进制整数, 位十进制整数, n最大为 6位十进 制整数。所有均可能出现前导 制整数。所有均可能出现前导 0,但 c和 n除去符号位之外的长度分别不超过 6和 6。
  6. 对于所有的不合法的输入,程序要给出响应,即输出为“ERROR”

那我们社会人应该怎么解决这道题目呢?

如果按照面向流程的思路设计,我们以c语言为例,首先是判断输入是否合法,采用的方法是对输入进行输入流判断,然后就是一路遍历,取出合法的多项式,然后构成多项式,最后进行计算,而作为初入面向对象的小白来说,第一次作业就用面向对象来写,着实有些困难,所以在下还是用一个C语言的形式来实现这个作业了,那么我是具体如何实现的呢?

首先是正则表达式:对于转换可以大家可以自行搜索,主要讲一下正则表达式的匹配的吧,对于该问题,我是这样考虑的,从整体的多项式的结构来看,我们分析其中的字符特点,有以下几个特点:

  1. 对于输入字符串的第一个和最后一个字符,只能是‘{’和‘}‘,当然这里是过滤了开头的字符,因为那本身并没有太大意义
  2. 统计输入字符串,对于合法的输入,‘{’的个数一定等于‘}’的个数,一定等于“\\{(\\([+-]?[0-9]{1,6},(([+]?[0-9]{1,6})|([-]?[0]{1,6}))\\),){0,49}\\([+-]?[0-9]{1,6},(([+]?[0-9]{1,6})|([-]?[0]{1,6}))\\)\\}”的个数,且一定比”\\}[+-]\\{“多一个,所以我们采用统计这几类正则表达式的个数来判断输入字符串是否合法
  3. 在统计的过程中对输入的个数进行判断,
  4. 最后我们提取出每一个多项式,并在多项式中提取出数字
  5. 根据之前我们在分段时候采用的”\\}[+-]\\{”,将计算符号记录下来,最后进行计算,

关于正则匹配的代码

public static void find(String All_2, String str_num) {
Pattern p_2 = Pattern.compile(str_num);
Matcher m_2 = p_2.matcher(All_2);
while(m_2.find() && result4==1) {
formula(big, m_2.group(), no_5);
big++;
}
}

这里ALL_2,表示输入的字符串,str_num表示多项式的正则表达式,find()函数就是找出符合条件的多项式,在find()内部调用formula的作用是分析多项式,取出数字,为了计算多项式的个数我们采用了m.find()方法,而不是matches(),是正则表达式的完全匹配,而find()是包含匹配,所以能过找到多个不同的符合条件的式子,其实对于这一过程使用split也可以达到同样的效果。之后的计算以及输出过程就不做过多的叙述了。

面向对象第一话,大战java正则表达式的更多相关文章

  1. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

  2. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  3. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  4. 【转】详解Java正则表达式语法

    (转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...

  5. java正则表达式【大全】

    [正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...

  6. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  7. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  8. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  9. Java正则表达式的应用

    在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...

随机推荐

  1. Linux:发行版安装包的下载地址

    1.Linux发行版网址 发行版 http://distrowatch.com Linux发行版信息大全 Ubuntu http://www.ubuntu.com 官网 http://cdimage. ...

  2. related Field has invalid lookup: icontains 解决方法

    models.py 文件 # coding:utf8 from django.db import models class Book(models.Model):         name = mod ...

  3. linux中使用arcpy

    切换到对应目录   即下图的  server安装路径  /home/arcgis/arcgis/server/tools 然后输入 ./python  (这一步要注意    python这个命令    ...

  4. 2018/03/11 每日一个Linux命令 之 top

    每日一个Linux命令 之 top   今天在公司测试服务器上跑了一个我写的功能[本地测试过的],但是不知道怎么跑了个无限死循环出来,一个文件的体积在不停的变大,如果不管的话这能行? 上去一看,PHP ...

  5. 基础邮件原理(MUA,MTA,MDA)

    电子邮件基本概念: MUA(Mail User Agent)接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信: MTA(Mail Transfer Agent) 通过SMTP协议发送 ...

  6. mysql 数据操作 多表查询 多表连接查询 外链接之左连接 右连接

    1.外链接之左连接:优先显示左表全部记录   left join 在内连接的基础上保留左表的记录 即便左表有一条记录和右表没有关系,也把他留下 mysql> select * from empl ...

  7. 使用PHP创建一个REST API(译)

    最近API在网络领域有些风靡,明确的说是REST的影响力.这实在没什么好惊讶的,因为在任何编程语言中,消费REST API都是非常的容易.构建它也非常的简单,因为本质上你不会用到任何那些已存在很久的H ...

  8. [sh]sh最佳实战(含grep)

    sh虐我千百遍,我待sh如初恋. sh复习资料 http://www.cnblogs.com/iiiiher/p/5385108.html http://blog.csdn.net/iiiiher/a ...

  9. XenServer:使用XenCenter开设VPS(多图完整版)

    打铁要趁热,咱们接着来玩XenServer.昨天赵容用机房提供的KVM给服务器装了XenServer,今天我们来玩更有意思的:开小鸡.装好XenServer之后,访问我们的服务器IP,就可以看到Xen ...

  10. [ps] 灰度和通道基础知识

    灰度.灰度值.灰度图像 灰度:灰度使用黑色调来表示物体,即用黑色为基准色,不同饱和度的黑色来显示图像.每个灰度对象都具有从0%(白色)到100%(黑色)的亮度值.使用黑白或灰度扫描仪生成的图像通常以灰 ...