java解析字符串_用Java解析字符串有哪些不同的方法?
用Java解析字符串有哪些不同的方法?
對于解析播放器命令,我最常使用split方法通過定界符對字符串進行分割,然后再通過一系列ifs或switches找出其余部分。 Java中解析字符串的幾種不同方式是什么?
agweber asked 2020-02-13T13:44:16Z
15個解決方案
19 votes
我真的很喜歡正則表達式。 只要命令字符串相當簡單,您就可以編寫一些正則表達式,這些正則表達式可能需要花費幾頁代碼來手動解析。
我建議您查看[http://www.regular-expressions.info],以獲取有關正則表達式的良好介紹以及Java的特定示例。
Daniel Broekman answered 2020-02-13T13:52:57Z
15 votes
我假設您正在嘗試使命令界面盡可能地寬容。 如果是這種情況,建議您使用類似于以下的算法:
讀入字符串將字符串拆分為令牌
使用字典將同義詞轉換為常用形式
例如,將“ hit”,“ punch”,“ strike”和“ kick”全部轉換為“ hit”
在無序的基礎上執行操作
無序-“將猴子打在臉上”與“將猴子打在臉上”相同
包容性-如果命令應該是“打猴子”,而他們提供“打猴子”,則應檢查此命令匹配多少個命令。 如果只有一個命令,請執行此操作。 具有命令優先級甚至是一個好主意,即使有匹配項,它也將執行最高動作。
andrewrk answered 2020-02-13T13:52:31Z
13 votes
手動解析很有趣……在一開始:)
在實踐中,如果命令不是很復雜,則可以將它們與命令行解釋器中使用的方法一樣對待。 有可用的庫列表:[http://java-source.net/open-source/command-line。]我認為您可以從apache commons CLI或args4j(使用批注)開始。 它們有據可查,使用起來非常簡單。 它們自動處理解析,您唯一需要做的就是讀取對象中的特定字段。
如果您有更復雜的命令,那么創建一個正式的語法可能是一個更好的主意。 有一個非常好的庫,帶有圖形編輯器,調試器和語法解釋器。 它被稱為ANTLR(和編輯器ANTLRWorks),它是免費的:)還有一些示例語法和教程。
Bartosz Bierkowski answered 2020-02-13T13:53:27Z
7 votes
我將研究Zork的Java遷移,并傾向于一個簡單的自然語言處理器(由標記化或正則表達式驅動),例如(從此鏈接):
public static boolean simpleNLP( String inputline, String keywords[])
{
int i;
int maxToken = keywords.length;
int to,from;
if( inputline.length() = inputline.length()) return false; // check for blank and empty lines
while( to >=0 )
{
to = inputline.indexOf(' ',from);
if( to > 0){
lexed.addElement(inputline.substring(from,to));
from = to;
while( inputline.charAt(from) == ' '
&& from = keywords.length) { status = true; break;}
}
}
return status;
}
...
在我的書中,任何使程序員有理由再次看一下Zork的東西都是好事,只是要提防Grues。
...
Justin Standard answered 2020-02-13T13:54:00Z
6 votes
Sun本身建議不要使用StringTokenizer,而應使用String.spilt方法。
您還需要查看Pattern類。
bpapa answered 2020-02-13T13:54:29Z
6 votes
ANTLR / ANTLRWorks的另一票。 如果您創建文件的兩個版本,一個帶有用于實際執行命令的Java代碼,另一個不帶有(僅具有語法),則您將擁有該語言的可執行規范,這對于測試非常有用,而對于文檔而言則是福音。 ,如果您決定移植它,則可以節省大量時間。
John with waffle answered 2020-02-13T13:54:51Z
4 votes
如果要解析命令行,我建議使用Commons Cli。
Apache Commons CLI庫提供了用于處理命令行界面的API。
SaM answered 2020-02-13T13:55:16Z
4 votes
嘗試使用JavaCC Java解析器生成器。
它具有許多用于解釋語言的功能,并且在Eclipse上得到了很好的支持。
Alotor answered 2020-02-13T13:55:44Z
2 votes
@CodingTheWheel這是您的代碼,經過清理并通過eclipse(ctrl + shift + f),然后插入此處:)
每行前面包括四個空格。
public static boolean simpleNLP(String inputline, String keywords[]) {
if (inputline.length() < 1)
return false;
List lexed = new ArrayList();
for (String ele : inputline.split(" ")) {
lexed.add(ele);
}
boolean status = false;
to = 0;
for (i = 0; i < lexed.size(); i++) {
String s = (String) lexed.get(i);
if (s.equalsIgnoreCase(keywords[to])) {
to++;
if (to >= keywords.length) {
status = true;
break;
}
}
}
return status;
}
svrist answered 2020-02-13T13:56:09Z
1 votes
在空間上使用簡單的字符串標記器應該可以,但是實際上有很多方法可以執行此操作。
這是一個使用分詞器的示例:
String command = "kick person";
StringTokenizer tokens = new StringTokenizer(command);
String action = null;
if (tokens.hasMoreTokens()) {
action = tokens.nextToken();
}
if (action != null) {
doCommand(action, tokens);
}
然后可以將令牌進一步用作參數。 所有這些都假設參數中沒有使用空格...因此,您可能希望使用自己的簡單解析機制(例如獲取第一個空格并在操作之前使用文本,或者如果您不介意使用正則表達式, 快速命中),只需將其抽象出來即可在任何地方使用。
Mike Stone answered 2020-02-13T13:56:40Z
1 votes
當命令的分隔符String始終為相同的String或char(例如“;”)時,建議您使用StrinkTokenizer類:
StringTokenizer
但是當分隔符變化或很復雜時,建議您使用常規表達式,String類本身可以使用分裂方法,從1.4開始。 它使用java.util.regex包中的Pattern類
圖案
Telcontar answered 2020-02-13T13:57:14Z
1 votes
如果語言很簡單,就像
動詞名詞
然后手工分割效果很好。
如果更復雜,則應真正研究ANTLR或JavaCC之類的工具。
我在[http://javadude.com/articles/antlrtut]上有一個有關ANTLR(v2)的教程,它將使您了解它的工作原理。
Scott Stanchfield answered 2020-02-13T13:57:52Z
1 votes
JCommander看起來還不錯,盡管我尚未對其進行測試。
Pierre Gardin answered 2020-02-13T13:58:13Z
1 votes
如果您的文本包含一些定界符,則可以使用split方法。
如果文本包含不規則字符串,則意味著其中的格式不同,則必須使用regular expressions。
Pratik answered 2020-02-13T13:58:38Z
1 votes
split方法可以將字符串拆分為指定的子字符串表達式StringTokenizer的數組。它的參數有兩種形式,即:split(String regex)和split(String regex, int limit),其中split(String regex)實際上是通過調用split(String regex,int limit)來實現的,limit為0。然后,limit> 0和 極限<0代表什么?
當jdk解釋時:當limit> 0個子數組的長度達到限制時,也就是說,如果可能的話,可以將limit-1細分,作為子字符串保留(除非limit-1字符具有字符串拆分結束) ;
limit <0表示對數組長度沒有限制;
limit = 0字符串末尾的空字符串將被截斷。StringTokenizer類是出于兼容性原因,并且保留了舊類,因此我們應嘗試使用String類的split方法。參考鏈接
shouyu answered 2020-02-13T13:59:14Z
總結
以上是生活随笔為你收集整理的java解析字符串_用Java解析字符串有哪些不同的方法?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java切面不需要接口了吗_使用java
- 下一篇: 为什么买房不买4楼?