Java文档似乎没有提及任何关于弃用的内容StringTokenizer
,但我一直听说它很久以前就被弃用了.它被弃用是因为它有错误/错误,还是String.split()
更好地使用整体?
我有一些使用的代码,StringTokenizer
我想知道我是否应该认真考虑重构它以使用String.split()
,或者弃用是否纯粹是方便的问题,我的代码是安全的.
我想要执行精确的单词匹配和部分单词/子串匹配.例如,如果我搜索"男士剃须刀",那么我应该能够在结果中找到"男士剃须刀".但是在我搜索"en的剃须刀"的情况下,我也应该能够在结果中找到"男士剃须刀".我使用以下设置和映射:
索引设置:
PUT /my_index
{
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
映射:
PUT /my_index/my_type/_mapping
{
"my_type": {
"properties": {
"name": {
"type": "string",
"index_analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
插入记录:
POST /my_index/my_type/_bulk
{ "index": { "_id": 1 }}
{ "name": "men's shaver" }
{ "index": { "_id": 2 …
Run Code Online (Sandbox Code Playgroud) 在我的软件中,我需要将字符串分成单词.我目前拥有超过19,000,000个文档,每个文档超过30个单词.
以下哪两种方法是最好的方法(在性能方面)?
StringTokenizer sTokenize = new StringTokenizer(s," ");
while (sTokenize.hasMoreTokens()) {
Run Code Online (Sandbox Code Playgroud)
要么
String[] splitS = s.split(" ");
for(int i =0; i < splitS.length; i++)
Run Code Online (Sandbox Code Playgroud) 因此,我无法在使用自定义的同时扩展MultiAutoCompleteTextView
和支持它.这个问题特别随着电话而上升.在其中有一个游标作为参数方法具有在第一调用此方法有效的和未封闭的光标.但是,后续调用会导致空游标或关闭游标.我猜这与管理如何有关. CursorLoader
Tokenizer
mAdapter.setCursorToStringConverter();
convertToString()
LoaderManager
CursorLoader
如果我将setCursorToStringConverter()
方法注释掉,那么我会根据我在此视图中输入的文本看到可用选项列表.但是,由于没有convertToString()
实现terminateToken()
方法,因此自定义方法Tokenizer
不接收我想要的字符串,而是接收游标对象的代表字符串,因为游标尚未用于获取当前字符串值在得到的查询中的所需列的.
任何人都已经能够实现三类的组合(CursorLoader/LoaderManger
,MultiAutoCompleteTextView
,和Tokenizer
)?
我是否朝着正确的方向前进,或者这根本不可能?
我已经能够实现一个自定义MultiAutoCompleteTextView
支持SimpleCursorAdapter
的自定义Tokenizer
.我只是想知道是否有可能使用a来实现它CursorLoader
,因为严格模式抱怨光标MultiAutoCompleteTextView
没有被明确关闭.
任何帮助将不胜感激.
public class CustomMultiAutoCompleteTextView extends MultiAutoCompleteTextView
implements LoaderManager.LoaderCallbacks<Cursor> {
private final String DEBUG_TAG = getClass().getSimpleName().toString();
private Messenger2 mContext;
private RecipientsCursorAdapter mAdapter;
private ContentResolver mContentResolver;
private final char delimiter = ' ';
private CustomMultiAutoCompleteTextView mView;
// If non-null, this is the current filter the …
Run Code Online (Sandbox Code Playgroud) android stringtokenizer autocompletetextview android-cursorloader
我使用StringTokenizer从数据库获取日期值如"2013-02-27 06:06:30"我将分别得到时间,如下所示
String startTime = "2013-02-27 06:06:30";
StringTokenizer token = new StringTokenizer(startTime);
String date1 = token.nextToken();
String time1 = token.nextToken();
Run Code Online (Sandbox Code Playgroud)
在时间1我得到的结果06:06:30,
我可以将它重新存储在String类型的另一个变量中,如下所示吗?
String displayValue = "06:06 AM";
Run Code Online (Sandbox Code Playgroud)
如果time1变量的值为
String time = 16:00:00;
Run Code Online (Sandbox Code Playgroud)
那么它应该转换为:
String displayValue = "04:00 PM";
Run Code Online (Sandbox Code Playgroud) 我正在考试这StringTokenizer.java
门课,脑海里浮现出几个问题.
我注意到其他类使用的公共方法调用了一些完成所有工作的私有方法.现在,我知道OOD的原则之一就是尽可能多地私有化并隐藏所有实现细节.我不确定我是否完全理解这背后的逻辑.
我理解,将字段设为私有以防止将无效值存储在其中非常重要(这只是众多原因之一).然而,当谈到私人方法时,我不确定它们为何如此重要.
例如,在StringTokenizer
类的情况下,我们不能只将所有实现代码放在公共方法中吗?它如何对使用这些方法的类产生影响,因为这些方法的API(即调用这些公共方法的规则)将保持不变?我能想到为什么私有方法有用的唯一原因是它可以帮助你编写重复的代码.例如,如果所有公共方法都做了同样的事情,那么您可以声明一个执行此任务的私有方法,并且可以由公共方法使用.
其他问题,在私有方法中编写实现而不是公共方法有什么好处?
这是一个小例子:
public class Sum{
private int sum(int a, int b){
return a+b;
}
public int getSum(int a, int b){
return sum(a,b);
}
}
Run Code Online (Sandbox Code Playgroud)
VS ...
public class Sum{
public int getSum(int a, int b){
return a+b;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个样本如何更有益?
java encapsulation private-methods stringtokenizer public-method
我有一个字符串,我必须解析不同的关键字.例如,我有字符串:
"我会在123woods来见你"
我的关键字是
'123woods''森林'
我应该在每次有比赛时报告.还应考虑多次出现.然而,对于这个,我应该只在123woods匹配,而不是在树林.这消除了使用String.contains()方法.此外,我应该能够有一个列表/一组关键字,并同时检查它们的发生.在这个例子中,如果我有'123woods'和'come',我应该两次出现.方法执行在大文本上应该有点快.
我的想法是使用StringTokenizer,但我不确定它是否会表现良好.有什么建议?
我已经使用过String[] split(String)
的String
阶级分裂任何字符串为某些给定的分隔符,它工作得很好.
但是,现在预计会重新考虑相同的逻辑因素StringTokenizer
.但是使用一个与另一个相比有什么不同和好处.
此外,我觉得在单个调用中String[]
返回的split()
是比使用类的对象更有效的选项StringTokenizer
.
我想知道如何在java中使用带有StringTokenizer的多个分隔符.例如,其中一个!,*,/,^
将作为分隔符出现.此外,一次只能有一个.
我需要一个6位数字的正则表达式,可选2位十进制数字 允许值:
.1 .11 0.11 10. 10.1 10.12 00.00 0.0 00.00
123456 12345 1234 123 12 1 0 0. 123. 123.55 123456.
Run Code Online (Sandbox Code Playgroud) stringtokenizer ×10
java ×6
string ×3
android ×2
split ×2
android-date ×1
autocomplete ×1
deprecated ×1
n-gram ×1
performance ×1
regex ×1
substring ×1