Indexing 标记/HTML转换器-字符串索引超出范围
我对我的第一个Java作业感到困惑!我遵循我老师的伪代码,并试图使它看起来像我们在课堂上做的例子,但我得到一个错误,说“字符串索引超出范围:-1”。我环顾四周,但真的没有发现错误是以这种方式发生的,或者我只是不知道如何使用这些信息来解决我的问题 有人能帮我吗Indexing 标记/HTML转换器-字符串索引超出范围,indexing,substring,Indexing,Substring,我对我的第一个Java作业感到困惑!我遵循我老师的伪代码,并试图使它看起来像我们在课堂上做的例子,但我得到一个错误,说“字符串索引超出范围:-1”。我环顾四周,但真的没有发现错误是以这种方式发生的,或者我只是不知道如何使用这些信息来解决我的问题 有人能帮我吗 // MarkdownTranslator -- Converts input text written in Markdown format // into equivalent HTML.
// MarkdownTranslator -- Converts input text written in Markdown format
// into equivalent HTML.
import java.util.*; // needed for the Scanner class
public class MarkdownTranslator
{
public static void main (String [] args)
{
String input = getUserInput();
String output = "";
Scanner text = new Scanner(input);
while(text.hasNextLine()){
String line = text.nextLine();
if (line.length() == 0){
line = "<p></p>";
}
else{
String working = "";
int index = line.indexOf("*");
if(index > -1) {
working = line.substring(0, index);
line = line.substring(index+1, line.length());
index = line.indexOf("*");
String subject = line.substring(0, index);
working = working + translateEmphasis(subject);
working = working + line.substring(index+1, line.length());
line = working;
working = "";
}
index = line.indexOf("**");
if(index > -1) {
working = line.substring(0, index);
line = line.substring(index+2, line.length());
index = line.indexOf("**");
String subject = line.substring(0, index);
working = working + translateStrongEmphasis(subject);
working = working + line.substring(index+2, line.length());
line = working;
working = "";
}
index = line.indexOf("`");
if(index > -1) {
working = line.substring(0, index);
line = line.substring(index+1, line.length());
index = line.indexOf("`");
String subject = line.substring(0, index);
working = working + translateCode(subject);
working = working + line.substring(index+1, line.length());
line = working;
working = "";
}
index = line.indexOf("![");
if(index > -1) {
working = line.substring(0, index);
line = line.substring(index+2, line.length());
index = line.indexOf("](");
String altText = line.substring(0, index);
line = line.substring(index+2, line.length());
index = line.indexOf(" \"");
String imgPath = line.substring(0, index);
line = line.substring(index+2, line.length());
index = line.indexOf("\")");
String titleText = line.substring(0, index);
line = line.substring(index+2, line.length());
working = working + translateImage(altText, imgPath, titleText);
working = working + line.substring(index+2, line.length());
line = working;
working = "";
}
index = line.indexOf("[");
if(index > -1) {
working = line.substring(0, index);
line = line.substring(index+1, line.length());
index = line.indexOf("](");
String linkText = line.substring(0, index);
line = line.substring(index+2, line.length());
index = line.indexOf(")");
String urlText = line.substring(0, index);
line = line.substring(index+1, line.length());
working = working + translateHyperlink(linkText, urlText);
working = working + line.substring(index+1, line.length());
line = working;
working = "";
}
}
output = output + line + "\n";
}
System.out.println(output);
}
public static String translateEmphasis (String text)
{
return "<em>" + text + "</em>";
}
public static String translateStrongEmphasis (String text)
{
return "<strong>" + text + "</strong>";
}
public static String translateHyperlink (String text, String url)
{
return "<a href =" + url + ">" + text + "</a>";
}
public static String translateImage (String alt, String path, String title)
{
return "<img src =" + path + " alt =" + alt + " title =" + title + ">";
}
public static String translateCode (String text)
{
return "<code>" + text + "</code>";
}
// DO NOT MODIFY THE FOLLOWING HELPER METHOD
private static String getUserInput()
{
Scanner in = new Scanner(System.in);
boolean done = false;
System.out.print("Please enter one or more lines of text. When you are ");
System.out.print("finished, enter a single\nperiod on a line by itself ");
System.out.println("to exit (the period will not be included in your\ninput):");
String result = "";
while (!done)
{
String line = in.nextLine();
// Check to see if we received a single period as input
if (line.trim().equals("."))
{
done = true; // terminate the loop
}
else
{
// Add the current line to the buffer and keep going
result = result + line;
result = result + "\n"; // restore the newline that nextLine() ate
}
}
return result;
}
}
发布堆栈跟踪以找出问题所在。我不确定这意味着什么!下面就是错误:
线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:-1位于java.lang.String.substring(未知源代码)的MarkdownTranslator.main(MarkdownTranslator.java:48)