通过鼓励这个,事实上我有十亿串的解析,我想修改我的代码接受的StringTokenizer代替的String []
我和你之间唯一能够获得美味的x2性能提升的事实就是你正在做的事情
"dog,,cat".split(",")
//output: ["dog","","cat"]
StringTokenizer("dog,,cat")
// nextToken() = "dog"
// nextToken() = "cat"
Run Code Online (Sandbox Code Playgroud)
如何使用StringTokenizer获得类似的结果?有没有更快的方法来做到这一点?
我正在努力将代码从JAVA移植到C#,而部分JAVA代码使用了tokenizer - 但我的理解是,Java中stringtokenizer生成的数组也会有分隔符(在这种情况下为+, - ,/,*,(,))作为代币.我试图使用C#Split()函数,但它似乎消除了分隔符本身.最后,这将解析一个字符串并将其作为计算运行.我做了很多研究,但没有找到任何关于这个主题的参考资料.
有谁知道如何让它们遇到的实际分隔符在split数组中?
令牌化代码:
public CalcLexer(String s)
{
char[] seps = {'\t','\n','\r','+','-','*','/','(',')'};
tokens = s.Split(seps);
advance();
}
Run Code Online (Sandbox Code Playgroud)
测试:
static void Main(string[] args)
{
CalcLexer myCalc = new CalcLexer("24+3");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
"24 + 3"将产生以下输出:"24","3"我正在寻找输出"24","+","3"
在完全公开的性质中,该项目是类分配的一部分,并使用以下完整的源代码:
http://www.webber-labs.com/mpl/source%20code/Chapter%20Seventeen/CalcParser.java.txt http://www.webber-labs.com/mpl/source%20code/Chapter%20Seventeen/CalcLexer .java.txt
我需要使用分隔符拆分文本". ".例如,我想要这个字符串:
Washington is the U.S Capital. Barack is living there.
Run Code Online (Sandbox Code Playgroud)
分为两部分:
Washington is the U.S Capital.
Barack is living there.
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
// Initialize the tokenizer
StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ". ");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
Run Code Online (Sandbox Code Playgroud)
不幸的是输出:
Washington
is
the
U
S
Capital
Barack
is
living
there
Run Code Online (Sandbox Code Playgroud)
有人可以解释发生了什么吗?
我正在使用Java StreamTokenizer来提取字符串的各种单词和数字,但是遇到了一个问题,其中包含逗号的数字,例如10,567被读作10.0和567.
我还需要从可能出现的数字中删除所有非数字字符,例如$ 678.00应为678.00或-87应为87.
我相信这些可以通过whiteSpace和wordChars方法实现,但有没有人知道如何做到这一点?
目前基本的streamTokenizer代码是:
BufferedReader br = new BufferedReader(new StringReader(text));
StreamTokenizer st = new StreamTokenizer(br);
st.parseNumbers();
st.wordChars(44, 46); // ASCII comma, - , dot.
st.wordChars(48, 57); // ASCII 0 - 9.
st.wordChars(65, 90); // ASCII upper case A - Z.
st.wordChars(97, 122); // ASCII lower case a - z.
while (st.nextToken() != StreamTokenizer.TT_EOF) {
if (st.ttype == StreamTokenizer.TT_WORD) {
System.out.println("String: " + st.sval);
}
else if (st.ttype == StreamTokenizer.TT_NUMBER) {
System.out.println("Number: " + st.nval);
}
}
br.close();
Run Code Online (Sandbox Code Playgroud)
或者有人建议REGEXP来实现这一目标吗?我不确定REGEXP在这里是否有用,因为在从字符串中读取标记之后会发生任何parding. …
我正在使用Elasticsearch版本1.2.1。我有一个用例,其中我想创建一个自定义令牌生成器,该令牌生成器将令牌的长度破坏到一定的最小长度。例如,假设最小长度为4,则令牌“ abcdefghij”将被拆分为:“ abcd efgh ij”。
我想知道是否可以在无需编写自定义Lucene Tokenizer类的情况下实现此逻辑?
提前致谢。
我正在像在Java中那样在Swift中创建一个简单的String Tokenizer ......但是它真的不适合我.
我的数据源中每行的结尾用"^"分隔,数据用逗号分隔.
例如:"string 1,string 2,string 3,^,string 1,string 2,string 3,^"
这就是我在Java中所做的...(我只希望每行数据中的前两个字符串)
String delimeter = "^";
StringTokenizer tokenizedString = new StringTokenizer(responseString,delimeter);
String [] stringArray = new String [tokenizedString.countTokens()];
StringTokenizer tokenizedAgain;
String str1;
String str2;
String token;
for(int i =0; i< stringArray.length; i ++)
{
token = tokenizedString.nextToken();
tokenizedAgain = new StringTokenizer(token, ",");
tokenizedAgain.nextToken();
str1 = tokenizedAgain.nextToken();
str2 = tokenizedAgain.nextToken();
}
Run Code Online (Sandbox Code Playgroud)
如果有人能指出我正确的方向,那将非常有帮助.
我看过这个:Swift:将一个String拆分成一个数组
这个:http://www.swift-studies.com/blog/2014/6/23/a-swift-tokenizer
但是我无法在Swift中找到关于String Tokenizing的其他资源.谢谢!
我曾经StringTokenizer获取字符串的标记。但是当我尝试StringTokenizer使用 for 循环和 while 循环打印其中的所有标记时,我得到了两个不同的输出。
String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 for 循环打印所有令牌时
for (int i=0;i<stringTokenizer.countTokens();i++)
System.out.println(stringTokenizer.nextToken());
Run Code Online (Sandbox Code Playgroud)
输出
她是个有魅力的女孩
当我尝试使用 while 循环打印所有令牌时
while (stringTokenizer.hasMoreElements())
System.out.println(stringTokenizer.nextToken());
Run Code Online (Sandbox Code Playgroud)
输出
她是个有魅力的女孩
她不是吗?
我想知道为什么 while 循环给出了预期的两个标记,而 for 循环没有给出两个标记。
假设我有一个包含换行符和制表符的长字符串:
var x = "This is a long string.\n\t This is another one on next line.";
Run Code Online (Sandbox Code Playgroud)
那么我们如何使用正则表达式将此字符串拆分为标记?
我不想使用,.split(' ')因为我想学习Javascript的正则表达式.
一个更复杂的字符串可能是这样的:
var y = "This @is a #long $string. Alright, lets split this.";
Run Code Online (Sandbox Code Playgroud)
现在我只想从这个字符串中提取有效单词,没有特殊字符和标点符号,即我想要这些:
var xwords = ["This", "is", "a", "long", "string", "This", "is", "another", "one", "on", "next", "line"];
var ywords = ["This", "is", "a", "long", "string", "Alright", "lets", "split", "this"];
Run Code Online (Sandbox Code Playgroud) 我想使用多个字符分隔符拆分字符串,但我也想存储分隔符.我的分隔符是()+-*/
所以,例如,如果我有一个字符串
26+78(12*23)-16
我想得到
26
+
78
(
12
*
23
)
-
16
Run Code Online (Sandbox Code Playgroud)
每行作为单独的数组元素.
我认为你不能使用split函数来实现这一点.但是,我使用string-tokenizer进行的试验也失败了.我怎样才能做到这一点?
String s = "test -||- testing again -|- test_1 -||- testing again_1";
StringTokenizer tokenizer = new StringTokenizer(s,"-|-");
System.out.println(tokenizer.countTokens());
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
Run Code Online (Sandbox Code Playgroud)
输出:
4
test
testing again
test_1
testing again_1
Run Code Online (Sandbox Code Playgroud)
算不应该是2 ..?
我尝试打印令牌,所有字符串都打印出来.不仅应将其视为一种标记.
我还从java API doc中读到了以下内容,
分隔符用于分隔令牌.令牌是不是分隔符的连续字符的最大序列
如果是这种情况,不应该使用我的分隔符" - | - "将字符串分成2个?
stringtokenizer ×10
java ×6
string ×6
tokenize ×3
regex ×2
analyzer ×1
c# ×1
ios ×1
javascript ×1
lucene ×1
numbers ×1
parsing ×1
performance ×1
split ×1
swift ×1