问题是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();
}
}
答案 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方法定义格式 了解更多信息: