- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 StreamTokenizer,可以对字符串进行标记。我对从字符串中获取下一个标记以及剩余字符串(没有我们刚刚获取的标记)的方法感兴趣。
public static void parseString(String s){
StreamTokenizer st = new StreamTokenizer(new StringReader(s));
try {
while (st.nextToken() != st.TT_EOF){
if (st.ttype == st.TT_WORD){
System.out.println("Word: " + st.sval);
if (st.sval.equals("start")){
start(st.sval, ???)
}
}
else if (st.ttype == st.TT_NUMBER){
System.out.println("Number: " + st.nval);
}
else if (st.ttype == '\''){
System.out.println(st.sval);
}
else{
System.out.println((char)st.ttype);
}
}
} catch (IOException e){}
}
public String start(String text, String theRest){
return "<start>" + text + "" + parseString(theRest) + "</start>";
}
我尝试过的一些事情:
我尝试过仅使用原始 String ,但 StreamTokenizer 在标记化 String 后不会更改 String (我忘记了描述这一点的词)。
我可以找到当前标记的索引,并将该标记从原始字符串中分割出来。
我想知道是否有更优雅的方法来解决这个问题?
最佳答案
关于第一个要点,我相信您想到的词可能是“不可变”。你是对的,任何看似操作字符串的操作实际上都是在创建一个新字符串;原件完好无损。
对于第二个要点,坦率地说,我也会提出同样的建议。目前我想不出更好的办法。
这是一个一般示例:
int startIndex = s.indexOf(currentToken) + currentToken.length;
String remainingString = s.subString(startIndex, s.length-1);
如果我的字符串是“Hi my name is Paul”,并且当前标记是“name”,则 remainingString
的结果应该是“is Paul”。
您可以轻松地将其封装在某个地方的辅助方法中,以帮助保持事物干净和分离。
可能不是您正在寻找的答案,但希望这会有所帮助。
关于java - 使用 StreamTokenizer 获取下一个标记和剩余的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23114847/
我使用方法 quoteChar('"') 来处理字符串。解析字符串时,常见的转义序列(例如“\n”和“\t”)会被识别并转换为单个字符。有什么方法可以让字符串保持原样,这意味着如果我有字符串: Hel
简而言之:如何更改 StreamTokenizer,以便它将输入文件中的每个字符拆分为标记。 例如,如果我有以下输入: 1023021023584 如何读取它以便将每个单独的字符保存到数组的特定索引中
考虑这个在教程点上找到的程序(其中 br 是 BufferedReader 对象): boolean eof = false; // Parse incoming request StreamToke
我正在为实验室开发自己的解析器,并且在使用 StreamTokenizer 时遇到了一些奇怪的行为。似乎任何用单引号括起来的东西都会被跳过。 代码 StreamTokenizer st = new S
我正在制作一个 HTML 渲染器。我将 html 文件读入 StreamTokenizer 中。目前它打印出正确的标记,并在我的 html 文件中指定用美元括起来的 varbiles,例如 $myVa
我有以下语法: gui ::= Window String widgets widgets ::= Button STRING ';'| radio_button End ';
我必须在 Java 中接受包含大量 10^9 阶的输入。如何快速处理输入?另外,由于streamtokenizer.nval给出了一个 double 值,我如何读取更大的值? 最佳答案 在解析之前,重
我已经挪用并修改了以下代码,这些代码在使用 Java 的 StreamTokenizer 对 Java 代码进行标记化方面做得非常好。但是,它的数字处理是有问题的: 它将所有整数转换为 double
我正在尝试实现一个分词器来将数学输入字符串解析为单独的部分,当我发布它期待一个 ; 时,我在第二行代码中遇到了一个看似微不足道的错误。线路中间的某个地方。 public static void par
我正在使用StreamTokenizer编写一个解析器。我需要像 "8a" 这样的输入来回显数字包含字符的错误。相反,它打印: NUM: 8 ID: a 它似乎将字符识别为单独的标记,即使没有空格分隔
我有一个接受数字的 StreamTokenizer。但是,解析的数字与输入的数字不同。 示例代码: String str = "1000000000000.0000000000000"; double
我正在使用 Java 的 StreamTokenizer 来标记代码文本输入。 当转义字符出现在字符串中时,分词器将它们取消转义,而我想保持字符串不变。 例如: Input: String str =
我正在使用 StreamTokenizer 来解析文本,我需要确保某些标记之间有空格。例如,“5+5”是非法的,但“5 + 5”是有效的。 我真的不太了解StreamTokenizer;我阅读了 AP
我有一个 StreamTokenizer,可以对字符串进行标记。我对从字符串中获取下一个标记以及剩余字符串(没有我们刚刚获取的标记)的方法感兴趣。 public static void parseSt
我正在为我的类开发一个解析器,它使用 StreamTokenizer java 中的类。在出现解析错误的情况下,我希望能够打印发生错误的标记开始的字符的确切行和偏移量。然而,虽然StreamToken
我有一个用于解析标记的 StreamTokenizer。当我将以下内容传递给标准输入时: a b_c d 解析的标记(在 stdout 上)是: a b null c d 为什么会这样?如果下划线是单
查看 StreamTokenizer 的演示代码 here .当字符串中有/时似乎无法正常工作(只需在StringReader中的字符串之间添加/)。这是来自上述链接的代码, StreamTokeni
在代码中 switch(token){ case StreamTokenizer.TT_EOF: eof = true; break; case Str
我正在尝试解析包含电子邮件地址的文档,但是 StreamTokenizer将电子邮件地址分成两个独立的部分。 我已经将 @ 符号设置为 ordinaryChar 并将空格设置为唯一的 whitespa
你好我正在构建自己的 StreamTokenizer 来满足我的需求。就像 java 的 StreamTokenizer 一样,我有一个 nextToken() 方法,它返回一个表示找到的数据类型的整
我是一名优秀的程序员,十分优秀!