Hellow Stack Overflow人.我想对以下问题提出一些建议.我正在使用Java.
我有一个带有多个字符串的数组#1.例如,两个字符串可能是:"苹果落在牛顿的头上"和"苹果在树上生长".
另一方面,我有另一个数组#2,其中的术语如(Fruits => Apple,Orange,Peach; Items => Pen,Book; ...).我把这个数组称为我的"字典".
通过比较从一个阵列到另一个阵列的项目,我需要看到来自#1的项目属于哪个"类别"从#2落入.例如,来自#1的两者都属于"水果".
我最重要的考虑因素是速度.我需要快速完成这些操作.允许恒定时间检索的结构将是好的.
我考虑使用contains()方法的Hashset,但它不允许子字符串.我也尝试运行像(apple | orange | peach | ...等)的正则表达式,并且不区分大小写标记,但我读到当条款数量增加时(预期最小值为200),它将不会很快.最后,我搜索了,并考虑使用带有indexOf()的ArrayList,但我不知道它的性能.我还需要知道哪些术语实际匹配,所以在这种情况下,它将是"Apple".
请提供您对此问题的看法,想法和建议.
我看到了Aho-Corasick算法,但关键词/术语很可能经常改变.所以我认为我不能使用它.哦,我不是文本挖掘和数学方面的专家,所以请详细说明复杂的概念.
感谢Stack Overflow人,您的时间!:)
我实际上有两个关于Java RMI和线程同步的问题:
1)如果我将RMI远程方法实现为同步,它们是否保证互斥?我需要确保没有两个我的RMI方法(提供给客户端的方法)同时执行.
2)我有一个服务器定期执行的方法.它用于清理.当远程客户端运行/使用任何RMI方法时,我必须确保不执行此特定方法.此外,当该方法运行时,不应该进行RMI调用.即客户必须等待.知道我怎么能这样做吗?我读过有关Locks的内容,但我不知道如何在这种情况下使用它们.
我已经考虑过将RMI方法实现为静态并在RMI接口中包含清理方法,但它似乎并不是解决问题的优雅方法.
我还在RMI接口中将cleanup方法编写为synchronized.当我运行它进行测试时,方法之间似乎没有冲突,但我无法确定.
谢谢你的时间和答案.
我有这个留下递归的语法,我不明白我怎么能让它非左递归.这是我第一次使用解析器/语法等,所以请保持简单的解释.
msg: IDENTIFIER
| IDENTIFIER LBRACKET msg RBRACKET
| msg COMMA message
| LBRACE msg RBRACE LBRACE atom RBRACE
| msg XOR msg
| msg PERCENT IDENTIFIER
| IDENTIFIER PERCENT msg
| LBRACKET msg RBRACKET
;
atom: IDENTIFIER
| fn_app
;
fn_app: IDENTIFIER LBRACKET IDENTIFIER (COMMA IDENTIFIER)* RBRACKET;
Run Code Online (Sandbox Code Playgroud)
我自己尝试过,但是ANTLR仍然说有递归,我无法理解为什么.
ANTLR说:
[fatal] rule msg_contents has non-LL(*) decision due to recursive rule invocations reachable from alts 1,3. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
Run Code Online (Sandbox Code Playgroud)
我的尝试:
msg_contents: msg_part
| …Run Code Online (Sandbox Code Playgroud) 有人能告诉我如何覆盖HashSet的contains()方法来使用正则表达式匹配而不仅仅是equals()吗?
或者如果没有覆盖,我如何添加方法来使用正则表达式模式?基本上,我希望能够在包含字符串的HashSet上运行正则表达式,并且我需要使用正则表达式匹配子字符串.
如果我的方法不合适,请建议其他人.
谢谢.:)
你好再次Stackoverflow人!
假设我有这些话:智能手机,智能手机
我想匹配其中的子串"phone".但是,在这两种情况下,我只想要返回"电话",而不是第一种情况下的"电话".除此之外,我只想在单词"phone"只是后缀时才需要匹配,这样:
fonephonetics(仅举例)不匹配.
我假设正则表达式
(phone([?=s])?)\b
Run Code Online (Sandbox Code Playgroud)
会给我我需要的东西,但它目前正在匹配"手机"和"手机",而不是"fonephonetics".我不需要"手机".对于这两种情况我都想要"电话".
关于什么是错的,我能做什么的任何想法?
先感谢您!
很确定这已经被问到了,但我不知道该搜索什么.无论如何,
var livemarks = [];
var livemarkIds = PlacesUtils.annotations.getItemsWithAnnotation("livemark/feedURI", {});
for (var i = 0; i < livemarkIds.length; i++){
PlacesUtils.livemarks.getLivemark( {id : livemarkIds[i]}, function(result, livemark){
if (result == Components.results.NS_OK){
livemarks.push(livemark);
}
});
}
alert(livemarks.length);
Run Code Online (Sandbox Code Playgroud)
我试图玩一个不再由其创建者维护的Firefox插件,只是为了学习一点.我最近得到一个错误,说getFeedURI将被弃用,我想改变他的旧功能.
编辑:
从函数(内部函数)中定义的函数,我无法访问父类中定义的var.为什么?例如,我无法从getLivemark()内部或其他类似的内部函数访问var livemarks.
我正在检查(完全向下滚动):这和他的代码工作正常.那我的代码出了什么问题?如果可能的话,我只是想避免递归.
java ×4
antlr ×1
collections ×1
firefox ×1
grammar ×1
hashset ×1
javascript ×1
nlp ×1
recursion ×1
regex ×1
rmi ×1
synchronized ×1