线程“main”中的异常java.util.UnknownFormatConversionException:Conversion ='_'

时间:2014-11-06 21:35:33

标签: java printf

问题是Conversion = "_"。源代码在这里。我试着读一个txt,好吧!然后代码“标记”单词,它也可以。但是当我尝试保存在另一个txt时,我得到了这个错误。

但如果我删除“__”它会成功保存,但我不想删除“_”!

这是一个用于标记某些单词的程序。

我只是想知道我应该在那条线上做些什么。或者我可以做什么来运行我的项目而没有这个例外。

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '_'
    at cugru.test.main(test.java:81)

第81行!!

以下是代码:

package cugru;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;

import org.cogroo.analyzer.Analyzer;
import org.cogroo.analyzer.ComponentFactory;
import org.cogroo.text.Document;
import org.cogroo.text.impl.DocumentImpl;

public class test {

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

        FileReader reader = new FileReader(new File("D:/Felipe/Downloads/eclipse/workspace/java worskpace luna/Excel java/sumarios/gold sem tokens.txt"));      
        BufferedReader leitor = new BufferedReader(reader); 
        String linha = null; 
        int contadorTokens = 0;
        FileWriter arq = new FileWriter("d:\\tabuada.txt");
        PrintWriter gravarArq = new PrintWriter(arq);   

        //Cria procedimentos padrao do CoGrOO
        ComponentFactory factory = ComponentFactory.create(new Locale("pt", "BR"));
        Analyzer cogroo = factory.createPipe();


        int qtde = 0;

        while((linha = leitor.readLine()) != null) { 

            qtde++;
            if(qtde >10)
                break;

            //linha = linha.toLowerCase(); //deixa em minusculo

            //System.out.println(linha);
            linha = expandirAcronimos(linha);
            //System.out.println(linha);
            //System.out.println("======================================");


            /** for (int i = 0; i < sentenca.length; i++) {

                    sentenca = linha.split(" ");// separa a "linha" emdentro das aspas) e joga para o array sentenca
//              System.out.println(sentenca[i]);ido acetil saliclico ");
//              System.out.println(sentenca[i]);
                    sentenca[i] = sentenca[i].replace(" AAS "," ido acetil saliico ");
                }**/
            Document document = new DocumentImpl();
            document.setText(linha);

            cogroo.analyze(document);

            for (org.cogroo.text.Sentence sentence : document.getSentences()) { // lista de sentencas



                sentence.getStart(); sentence.getEnd(); // caracteres onde a sentenca comeca e termina
                String texto_sentenca = sentence.getText(); // texto da sentenca
                //Imprime sentenca
                //System.out.println(texto_sentenca);



                // Tokens
                for (org.cogroo.text.Token token : sentence.getTokens()) { // lista de tokens
                    token.getStart(); token.getEnd(); // caracteres onde o token comeca e termina
                    token.getLexeme(); // o texto do token (palavra que ele separa e pega exp: "clinico"
                    token.getLemmas(); // um array com os possiveis lemas para o par lexeme+postag
                    token.getPOSTag(); // classe morfologica de acordo com o contexto("coloca "prp, adj,n(noun))
                    token.getFeatures(); // genero, numero, tempo etc
                    contadorTokens++;
                    System.out.println(token.getLexeme() + "_" + token.getPOSTag() + "_" + token.getFeatures());// imprime a palavra com o tag
                      gravarArq.printf(token.getLexeme() + "__" + token.getPOSTag() + "__" + token.getFeatures());
                    //System.out.println(token.getLexeme());
                }




                //System.out.println("Total de tokens sao: "+contadorTokens);
            }  

        }



        reader.close(); 
        arq.close();  


    }




}

2 个答案:

答案 0 :(得分:1)

方法printf()println()不同。它用于格式化输出。第一个参数是一个格式化字符的字符串。例如:

System.out.printf( "%2d %2d%n", x, y );

但你使用了你想打印的东西作为第一个参数。该方法认为这是一个格式字符串,并查找以%开头的部分。你的字符串中可能有%,但在它之后有一个_。这不是合法格式,因此您会遇到此异常。

您可能想要使用println()方法。使用它可以消除异常。

答案 1 :(得分:0)

你从printf使用!

 gravarArq.printf(token.getLexeme() + "__" + token.getPOSTag() + "__" + token.getFeatures());

您必须为printf方法定义格式 了解更多信息:

link here