日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java scanner 用不了_java Scanner具有神奇的作用可惜大部分java开发人员不知

發(fā)布時(shí)間:2024/4/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java scanner 用不了_java Scanner具有神奇的作用可惜大部分java开发人员不知 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

3. Scanner

有無數(shù) Java 工具能幫助您構(gòu)建解析器,很多函數(shù)語言已成功構(gòu)建解析器函數(shù)庫(解析器選擇器)。但如果要解析的是逗號(hào)分隔值文件,或空格分隔文本文件,又怎么辦呢?大多數(shù)工具用在此處就過于隆重了,而

String.split() 又不夠。(對(duì)于正則表達(dá)式,請(qǐng)記住一句老話:“ 您有一個(gè)問題,用正則表達(dá)式解決。那您就有兩個(gè)問題了。”)

Java 平臺(tái)的 Scanner 類會(huì)是這些類中您最好的選擇。以輕量級(jí)文本解析器為目標(biāo),Scanner 提供了一個(gè)相對(duì)簡(jiǎn)單的 API,用于提取結(jié)構(gòu)化文本,并放入強(qiáng)類型的部分。想象一下,如果您愿意,一組類似 DSL 的命令(

源自 Terry Pratchett Discworld 小說)排列在文本文件中,如清單 7:

清單 7. Igor 的任務(wù)

fetch 1 head

fetch 3 eye

fetch 1 foot

attach foot to head

attach eye to head

admire? 您,或者是本例中稱為 Igor的私仆,能輕松使用 Scanner 解析這組違法命令,如清單 8 所示:

清單 8. Igor 的任務(wù),由 Scanner 解析

import java.io.*;

import java.util.*;

public class Igor?? implements IPersonalServant

{

public boolean can(String cmd)

{

if (cmd.equals("fetch body parts"))

return true;

if (cmd.equals("attach body parts"))

return true;

else

return false;

}

public void process(File commandFile)? throws FileNotFoundException

{

Scanner scanner = new Scanner(commandFile);? // Commands come in a verb/number/noun or verb form

while (scanner.hasNext())

{

String verb = scanner.next();

if (verb.equals("fetch"))

{

int num = scanner.nextInt();

String type = scanner.next();

fetch (num, type);

}

else if (verb.equals("attach"))

{

String item = scanner.next();

String to = scanner.next();

String target = scanner.next();

attach(item, target);

}

else if (verb.equals("admire"))

{

admire();

}

else

{

System.out.println("I don't know how to "+ verb + ", marthter.");

}

}

}

public void fetch(int number, String type)

{

if (parts.get(type) == null)

{

System.out.println("Fetching " + number + " " + type + (number > 1 ? "s" : "") + ", marthter!");

parts.put(type, number);

}

else

{

System.out.println("Fetching " + number + " more "? + type + (number > 1 ? "s" : "") + ", marthter!");

Integer currentTotal = parts.get(type);

parts.put(type, currentTotal + number);

}

System.out.println("We now have " + parts.toString());

}

public void attach(String item, String target)

{

System.out.println("Attaching the " + item + " to the " +? arget + ", marthter!");

}

public void admire()

{

System.out.println("It'th quite the creathion, marthter");

}

private Map parts = new HashMap();

}?? 假設(shè) Igor 已在 ServantLoader 中注冊(cè),可以很方便地將 can() 調(diào)用改得更實(shí)用,并重用前面的 Servant 代碼,如清單 9 所示:

清單 9. Igor 做了什么

import java.io.*;

import java.util.*;

public class Servant

{

public static void main(String[] args)throws IOException

{

ServiceLoader servantLoader = ServiceLoader.load(IPersonalServant.class);

IPersonalServant i = null;

for (IPersonalServant ii : servantLoader)

if (ii.can("fetch body parts"))

i = ii;

if (i == null)

throw new IllegalArgumentException("No suitable servant found");

for (String arg : args)

{

i.process(new File(arg));

}

}

}

真正 DSL 實(shí)現(xiàn)顯然不會(huì)僅僅打印到標(biāo)準(zhǔn)輸出流。我把追蹤哪些部分、跟隨哪些部分的細(xì)節(jié)留待給您(當(dāng)然,還有忠誠的 Igor)。

總結(jié)

以上是生活随笔為你收集整理的java scanner 用不了_java Scanner具有神奇的作用可惜大部分java开发人员不知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。