社区
Java SE
帖子详情
java输入的也许很简单的问题,给200分吧
dropship
2007-06-09 04:01:39
表达式求值:
30+3*(4-2.3)-3
这个式子,请问该怎么正确分解成为运算符和操作数?
我有个基本想法是:用DataInputStream来读一个byte,判断是否是数字,如果是,则放回流里面,然后以double形式重新读入一个。如果是字符,则是正常操作符。
如此直至读到末尾。
但这样做,我不知道怎么样把已经读入的字符放回流里面。
请教大家一个思路,谢谢!
...全文
2426
55
打赏
收藏
java输入的也许很简单的问题,给200分吧
表达式求值: 30+3*(4-2.3)-3 这个式子,请问该怎么正确分解成为运算符和操作数? 我有个基本想法是:用DataInputStream来读一个byte,判断是否是数字,如果是,则放回流里面,然后以double形式重新读入一个。如果是字符,则是正常操作符。 如此直至读到末尾。 但这样做,我不知道怎么样把已经读入的字符放回流里面。 请教大家一个思路,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
55 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CrazyGou
2007-06-12
打赏
举报
回复
http://blog.csdn.net/CrazyGou/archive/2007/06/10/1646246.aspx
楼主看了吗?
分割字符串只一句正则:
String[] words = str.split("(?<!^-?|[+/*()-]-)((?<=[+/*()-])|(?=[+/*()-]))");
然后遍历words
if (words[i].matches("-?\\d+|-?\\d+\\.\\d+")) { //操作数
...
}
else { //操作符
...
}
dsn21
2007-06-12
打赏
举报
回复
我还是比较支持先读到字符串里再用正则表达式,至于优先及在正则表达式匹配时可以按照一定的先后来读取.
flyIce945
2007-06-12
打赏
举报
回复
路过 看看
niko7
2007-06-12
打赏
举报
回复
关注
dropship
2007-06-12
打赏
举报
回复
结贴了。
看来一个一个字符扫描是常用方法。
hellking
2007-06-12
打赏
举报
回复
正则表达式。
去看看javacc。
下面是javacc中语法分析的正则表达式定义:
SKIP :
{
" "
| "\t"
| "\n"
| "\r"
| <"//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
| <"/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/">
}
TOKEN : /* LITERALS */
{
< INTEGER_LITERAL:
<DECIMAL_LITERAL> (["l","L"])?
| <HEX_LITERAL> (["l","L"])?
| <OCTAL_LITERAL> (["l","L"])?
>
|
< #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
|
< #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
|
< #OCTAL_LITERAL: "0" (["0"-"7"])* >
}
TOKEN : /* IDENTIFIERS */
{
< IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >
|
< #LETTER: ["_","a"-"z","A"-"Z"] >
|
< #DIGIT: ["0"-"9"] >
}
SimpleNode Start() : {}
{
Expression() ";"
{ return jjtThis; }
}
void Expression() : {}
{
AdditiveExpression()
}
void AdditiveExpression() : {}
{
MultiplicativeExpression() ( ( "+" | "-" ) MultiplicativeExpression() )*
}
void MultiplicativeExpression() : {}
{
UnaryExpression() ( ( "*" | "/" | "%" ) UnaryExpression() )*
}
void UnaryExpression() : {}
{
"(" Expression() ")" | Identifier() | Integer()
}
void Identifier() : {}
{
<IDENTIFIER>
}
void Integer() : {}
{
<INTEGER_LITERAL>
}
a_nuo
2007-06-12
打赏
举报
回复
顶了
jefyjiang
2007-06-12
打赏
举报
回复
不知道我是不是没有看明白题目,用正则式不是很好吗?
wmzsl
2007-06-11
打赏
举报
回复
用正则表达式
wolf863292
2007-06-11
打赏
举报
回复
学学看看
chenzhong370
2007-06-11
打赏
举报
回复
定一个!
cxz7531
2007-06-11
打赏
举报
回复
先消除括号,把括号用变量代替,再消除连续乘除,也用变量代替,最后剩下加减就好办了
南南北北
2007-06-11
打赏
举报
回复
路过。
j52145489
2007-06-11
打赏
举报
回复
请问正则表达式中的特殊构造中的
(?=X) (?!X) (?<=X) (?<!X) (?>X)是什么意思?
java的api中的解释看不明白
zzh233
2007-06-11
打赏
举报
回复
学习
dyw31415926
2007-06-11
打赏
举报
回复
学习
KingNE
2007-06-11
打赏
举报
回复
split
zsq007zsq007
2007-06-11
打赏
举报
回复
我也期待有更好的解决方法!!!
xk2y
2007-06-10
打赏
举报
回复
学习下````
chllcy
2007-06-10
打赏
举报
回复
楼上的 你的方法行的不???短短几行啊......
????
加载更多回复(35)
JDK中藏匿的好工具pack
200
介绍
Java
5中的Pack
200
工具,用于高效压缩jar文件,特别适合含有大量
Java
类的文件。通过合并常量池、移除冗余属性等方式显著减少文件大小,适用于
Java
Web Start和
Java
Plug-in应用。
散
分
200
,升四叉与离别
作者回顾编程6年历程,从初中接触编程,学过十几门语言,其中Delphi是最熟悉的。但随着学习深入,接触C、C++和
Java
后,Delphi逐渐被冷落。因就业压力,未来使用Delphi机会可能减少,反映了编程学习和职业选择的变化。
Java
写一个
简单
的扫雷游戏
本文
分
享了一个
Java
初学者制作扫雷游戏和计算器的经历,讲述了遇到的困难、解决方案,以及代码实现。重点讨论了布局
问题
的解决和存在的bug,同时给出了完善建议。
Python 华为机考真题【用户调度
问题
】
分
值【Q2-
200
】
本文介绍了华为机考中的一道应用编程题,涉及用户调度
问题
的解决方案,采用深度优先搜索策略,根据题目规则求解系统资源消耗的最小值。文章提供了
输入
输出示例及解题思路与代码实现。
不知道如何编写高性能
Java
代码?
也许
这些能帮到你
本文深入探讨了
Java
应用性能优化的全面策略,包括负载测试、APM工具的应用、高性能
Java
代码编写、JVM调优技巧、数据库优化及架构调整。通过具体示例,如使用Gatling进行负载测试和Stackify Retrace监控应用,阐述了识别和解决性能瓶颈的方法。
Java SE
62,622
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章