Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输出Java映射并在HTML中混合_Java_Html_Map - Fatal编程技术网

输出Java映射并在HTML中混合

输出Java映射并在HTML中混合,java,html,map,Java,Html,Map,我目前正在编写自己版本的Java词汇表。说实话,这是学术性的,我希望有人能给我指出第一个方向。无论如何,我从一个文本文件中读取文本,并将单词及其对应的定义放入一个映射(更具体地说是树映射)。从那以后一切都很顺利。地图上的一切都是应该的 现在我开始进入我想要进入HTML并输出地图内容的部分。我知道如何使用迭代器,这不是什么问题。然而,当我试图显示与HTML混合的内容时,我并没有得到我想要的一切。页面最终应该是这样的: 还有一个特别棘手的部分,如果定义中包含一个术语,它应该是可点击的。这是我到目前为

我目前正在编写自己版本的Java词汇表。说实话,这是学术性的,我希望有人能给我指出第一个方向。无论如何,我从一个文本文件中读取文本,并将单词及其对应的定义放入一个映射(更具体地说是树映射)。从那以后一切都很顺利。地图上的一切都是应该的

现在我开始进入我想要进入HTML并输出地图内容的部分。我知道如何使用迭代器,这不是什么问题。然而,当我试图显示与HTML混合的内容时,我并没有得到我想要的一切。页面最终应该是这样的:

还有一个特别棘手的部分,如果定义中包含一个术语,它应该是可点击的。这是我到目前为止所拥有的。再说一次,如果有人能帮我弄清楚为什么HTML的主要内容没有显示出来,我将非常感激!顺便说一下,我从中获取的文本文件名为:terms.txt,写入的html文件名为glossary.html

这就是我到目前为止所做的:

public class Glossary {

/**
 * @param args
 * @throws IOException
 */
public static void main(String[] args) throws IOException {
    Map<String, String> dictionary = new TreeMap<String, String>();

    File htmlFile = new File(
            "/Users/myname/Documents/workspace/Lab10/src/glossary.html");
    File file = new File(
            "/Users/myname/Documents/workspace/Lab10/src/terms.txt");
    Writer out = new OutputStreamWriter(new FileOutputStream(htmlFile));

    String term = null;
    String def = null;
    String key = null, value = null;
    String lead = null;
    String multiFinalDef = null;
     Set<String> checkValues = new HashSet<String>();
    String leftOver = null;
    boolean check = false;
    Scanner input = null;
    try {
        input = new Scanner(file);

        while (input.hasNext()) {
            String keepTrack;
            boolean multi = false;
            String line = input.nextLine();

            term = line;
            def = input.nextLine();
            keepTrack = def;

            while (def.length() > 0 && input.hasNext()) {
                def = input.nextLine();

                if (def.length() > 0) {
                    multiFinalDef = " " + keepTrack + def;
                    multi = true;
                }

            }

            if (multi) {
                dictionary.put(term, multiFinalDef);

            } else {
                dictionary.put(term, keepTrack);

            }
            checkValues.add(term);

        }

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        out.write("<HTML>\n");
        out.write("<HEAD>\n");
        out.write("</HEAD>\n");
        out.write("<BODY>\n");
        out.write("<H1>Glossary</H1>\n");
        out.write("<HR /\n");
        out.write("<H2>Index</H2>\n");
        out.write("<UL>\n");

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Set s = dictionary.entrySet();
    Iterator iterator = s.iterator();

    while (iterator.hasNext()) {


        Map.Entry m = (Map.Entry) iterator.next();

        // getKey is used to get key of map.
        key = (String) m.getKey();

        // getValue is used to get the value of the key in map.
        value = (String) m.getValue();

        // this is just so I know the output from the map is actually correct. And indeed it is.
        System.out.println("Key:\t\t\tValue\n " + key + "\t\t\t " + value
                + "\n");
        try {
            out.write("<LI><A HREF=\"#" + key + "\">" + key + "</A></LI>\n");
            out.write("</UL>\n");
            out.write("<HR />\n");

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    out.write("<H2>Terms and Definitions</H2>\n");
    out.write("<UL>\n" + "<P>\n");

    iterator = s.iterator();
    while (iterator.hasNext()) {
        Map.Entry temp = (Map.Entry) iterator.next();

        // getKey is used to get key of map.
        String keyTwo = (String) temp.getKey();

        // getValue is used to get the value of the key in map.
        String valueTwo = (String) temp.getValue();

        out.write("<H3><A NAME=\" " + keyTwo + "/><B><I><FONT COLOR=\"red\">"
                + keyTwo + "</FONT></I></B></LI></H3>\n");

    for(String getTerm : checkValues){

        if (valueTwo.contains(getTerm)) {

            check = true;
            int foundTermPosition = valueTwo.indexOf(getTerm);
            lead = valueTwo.substring(0, foundTermPosition - 1);
            //fix left over..
            leftOver = valueTwo.substring(foundTermPosition, valueTwo.length());
            out.write(lead);
            out.write("<A HREF=\"#" + keyTwo + "\">" + keyTwo + "</A>");
            out.write(leftOver + "\n");
            //out.write("</blockquote>\n");

        }
    }
            if( check == false)
            {
            out.write(lead + " " + valueTwo);
            }
        }



        //System.out.println(valueTwo + leftOver);

        // used to put words defined in file mentioned in definition
        // with hyperlinks to their associated locations, and output the
        // definition.

    out.write("</P>\n" + "</UL>\n");
    out.write("</BODY>\n");
    out.write("</HTML>");

    out.close();
}

}
公共类词汇表{
/**
*@param args
*@抛出异常
*/
公共静态void main(字符串[]args)引发IOException{
映射字典=新树映射();
File htmlFile=新文件(
“/Users/myname/Documents/workspace/Lab10/src/glossary.html”);
文件=新文件(
“/Users/myname/Documents/workspace/Lab10/src/terms.txt”);
Writer out=new OutputStreamWriter(new FileOutputStream(htmlFile));
字符串项=null;
字符串def=null;
字符串键=null,值=null;
字符串前导=空;
字符串multiFinalDef=null;
Set checkValues=new HashSet();
字符串剩余=空;
布尔检查=假;
扫描仪输入=空;
试一试{
输入=新扫描仪(文件);
while(input.hasNext()){
线龙骨架;
布尔多=假;
String line=input.nextLine();
术语=线;
def=input.nextLine();
keepTrack=def;
while(def.length()>0&&input.hasNext()){
def=input.nextLine();
如果(定义长度()>0){
multiFinalDef=“”+keepTrack+def;
多=真;
}
}
如果(多){
dictionary.put(术语,multiFinalDef);
}否则{
字典。放置(术语,保留跟踪);
}
检查值。添加(术语);
}
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
输出。写入(“\n”);
输出。写入(“\n”);
输出。写入(“\n”);
输出。写入(“\n”);
out.写出(“词汇表”\n);

在程序到达时写入(“”

out.write("<H2>Terms and Definitions</H2>\n");
out.write("<UL>\n" + "<P>\n");

while (iterator.hasNext()) {
   ...
out.write(“术语和定义”);
out.write(“
    \n”+”

    \n”); while(iterator.hasNext()){ ...

迭代器没有任何剩余项,因为在打印索引时,它在前几行的第一个while循环中耗尽。要再次迭代映射,需要再次调用迭代器方法。因此,上面的块将变为:

out.write("<H2>Terms and Definitions</H2>\n");
out.write("<UL>\n" + "<P>\n");

iterator = s.iterator();
while (iterator.hasNext()) {
   ...
out.write(“术语和定义”);
out.write(“
    \n”+”

    \n”); 迭代器=s.iterator(); while(iterator.hasNext()){ ...


据我所知,您希望生成html文档。在我看来,最好的通用方法是使用任何模板引擎


查看这篇文章需要几分钟的时间

是的,昨天我想了一会儿,然后错误地驳回了它。我会做出你建议的更改,然后再向你汇报。我真的很感谢你的帮助!是的,效果更好。所以现在我的勇气正在显现,但现在我只需要让超链接显示d中的内容实际上是术语的定义。由于我对Java中的映射缺乏经验,我将所有术语放在一个集合中,并使用foreach循环遍历每个定义,看看其中是否有任何内容与集合中的内容匹配。它几乎起到了作用,但当我使用“contains”时,它说“words”之类的内容与“word”匹配“如果这不是真的,也不是我想要的。考虑使用标记器…某种方法比包含更好吗?是的,您可以使用
StringTokenizer
提取文本中的单词,如下所示(请注意,尽管我建议您花一些时间将变量名更改为更有意义的名称,但我还是尝试保持变量名不变):String texttookenize=valueTwo;String delimiters=“,;”;StringTokenizer tokens=new StringTokenizer(texttookenize,delimiters);while(tokens.hasMoreTokens()){String currentToken=tokens.nextToken();if(getTerm.equals(currentToken)){…}