正则表达式 匹配罗马数字 并且返回匹配到的值
来源:互联网 发布:简述数据库系统的组成 编辑:程序博客网 时间:2024/05/16 09:12
这两天楼主处理一个需求 要在很多字符串里面匹配出字符串中的罗马数字 还要取出这些罗马数字进行一系列的操作.在度娘上找了半天也没找到有用信息 还被很多错误的代码误导了 非常痛苦.好在最后各种努力 花了半天时间达到了想要的结果.现在在这里记录并分享一下.如果需要转载 请注明出处 写好传送门.thanks
这里分享一个网站 可以把阿拉伯数字转化为对应的罗马数字 没有上限 好用点赞加分享
http://www.zhongguosou.com/education_graduate_course_tools/roman_numeral_convert.aspx
以下方法就可以取到字符串中的罗马数字,但是也会匹配上空字符串,所以需要后期程序处理
/** * 已经测试成功的取出正则表达式匹配的字符串 * @author erikas * @throws Exception */@org.junit.Testpublic void testReg() throws Exception {String str = "";//匹配罗马数字的正则,但是由于每一个都可能是0个 空字符串也会被匹配出来 需要后期在程序里再处理String regex = "(-| +|^)M{0,9}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})( +|$)"; Pattern p = Pattern.compile(regex);Matcher matcher = p.matcher(str);List<String> list = new ArrayList<String>();while (matcher.find()) {//matcher.find()返回true表示匹配到了结果 但是执行了之后如果后面没有再匹配成功的 会马上变成falseSystem.out.println("here");String srcStr = matcher.group();//把取出的结果 放入listlist.add(srcStr);}System.out.println(list);}
以下方法用于把罗马数字转换为对应的阿拉伯数字.
//罗马数字转阿拉伯数字: // 从前往后遍历罗马数字,如果某个数比前一个数小,则把该数加入到结果中; // 反之,则在结果中两次减去前一个数并加上当前这个数; // I、V、X、 L、 C、 D、 M // 1.5、10、50、100、500、1000 private static int r2a(String in){ int graph[] = new int[400]; graph['I'] = 1; graph['V']=5; graph['X']=10; graph['L']=50; graph['C']=100; graph['D']=500; graph['M']=1000; char[] num = in.toCharArray(); // 遍历这个数,用sum来总计和 int sum = graph[num[0]]; for(int i=0; i<num.length-1; i++){ // 如果,i比i+1大的话,直接相加 if(graph[num[i]] >= graph[num[i+1]]){ sum += graph[num[i+1]]; } // 如果i比i+1小的话,则将总和sum减去i这个地方数的两倍,同时加上i+1 // 就相当于后边的数比左边的数大,则用右边的数减左边的数 else{ sum = sum + graph[num[i+1]] - 2*graph[num[i]]; } } return sum; }
0 0
- 正则表达式 匹配罗马数字 并且返回匹配到的值
- 匹配的正则表达式
- 正则表达式的匹配
- 正则表达式的匹配
- 正则表达式的匹配
- 正则表达式的匹配
- PowerShell查找并返回匹配正则表达式的字符串
- JavaScript—正则表达式匹配成功后的返回结果
- =读取日志文件,正则表达式匹配出有用信息,并且保存到csv文件。
- 匹配java double值的正则表达式
- 正则表达式如何得到匹配的值
- C#正则表达式匹配被双引号包起来的中文并返回匹配的结果
- 正则表达式的匹配处理
- 正则表达式常用的匹配
- javascript的正则表达式匹配
- 超链接的正则表达式匹配
- 匹配路径的正则表达式
- 正则表达式的模式匹配
- 位图索引
- 使用MediaPlayer和SurfaceView播放视频
- Redis中-set主要操作函数小结
- eclipse web工程的优化
- c# SerialPort 简单介绍
- 正则表达式 匹配罗马数字 并且返回匹配到的值
- SQL Relay使用详解
- eclipse里面tomcat配置问题
- mysqli->multi_query()执行多条语句
- OpenStack之Nova分析——创建虚拟机(二)
- 宏定义的一些使用技巧总结( 转)
- 中断JAVA线程
- android 视频通话带回声消除一
- Codeforces Round #286 (Div. 2) B. Mr. Kitayuta's Colorful Graph +foyd算法的应用