我试图将没有空格的句子分成3个单词组。以下是句子。
MyNamePanBokVa
以下是我的代码
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
{
//String[] listOfWords = request.getParameter("wordList").trim().split("\n");
//int percentage = Integer.parseInt(request.getParameter("percentage"));
PrintWriter pw = response.getWriter();
int numberOfKnownWords = 0;
//Read the Hash File
String str = "";
File inputFile = new File("C:/Users/xxx/Desktop/Test.txt");
HashSet<String>set = new HashSet<String>();
BufferedReader br = new BufferedReader(new FileReader(inputFile));
while((str=br.readLine())!=null)
{
int lastIndex = 0;
for(int i=0;i<=str.length();i=i+3)
{
try
{
String stringPiece = str.substring(i, i+3);
lastIndex = i;
pw.println(stringPiece);
}
catch(Exception arr)
{
String stringPiece = str.substring(lastIndex, str.length());
pw.println(stringPiece);
}
}
}
}
不幸的是,这会产生以下输出。
MyN
ame
Pan
Bok
BokVa
这应该是,
MyN
ame
Pan
Bok
Bok
Va
我想我的for循环中有一个错误,但我无法发现它。这有什么不对?
答案 0 :(得分:3)
考虑i
处于V的情况。
MyNamePanBokVa
^
i = 12 到目前为止的输出:
MyN
ame
Pan
Bok
{
String stringPiece = str.substring(i, i+3);
//throws exception, lastindex is not updated
lastIndex = i;
}
catch(Exception arr)
{
String stringPiece = str.substring(lastIndex, str.length());
// lastIndex =9 prints BokVa
pw.println(stringPiece);
}
答案 1 :(得分:2)
您需要在获取stringPiece之前输入lastIndex。在上面的代码中,当你尝试获取stringPiece时,将生成异常并且lastindex将变为9,因此最后一个被删除的字符串是错误的。
按以下方式制作你的for循环。
for(int i=0;i<=str.length();i=i+3)
{
try
{
lastIndex = i;
String stringPiece = str.substring(i, i+3);
pw.println(stringPiece);
}
catch(Exception arr){
String stringPiece = str.substring(lastIndex, str.length());
pw.println(stringPiece);
}
}
答案 2 :(得分:1)
作业应
lastIndex = i+3;
因为如果lastIndex
抛出str.substring(i, i+3);
Exception
答案 3 :(得分:1)
可以做得更简单:
while((str=br.readLine())!=null)
{
String [] pieces = str.split("(...)/g");
for(int i=0;i<=pieces.length();i++)
{
pw.println(pieces[i]);
}
}
答案 4 :(得分:0)
它不在你的循环中。这就是你如何检测到你必须打印最后一部分。
try {
String stringPiece = str.substring(i, i+3);
lastIndex = i;
str.substring
抛出异常,因为i+3
在最后一次迭代中超出范围。 try
块将立即保留,并在catch
中继续执行。但是你还没有修改lastIndex
,catch
块会在当前之前打印一次迭代值。
要解决您的问题,请在try块中交换订单
try {
lastIndex = i;
String stringPiece = str.substring(i, i+3);
答案 5 :(得分:0)
当i = 12时,“str.substring(i,i + 3)”将抛出异常。因为长度是14. 12 + 3是15. lastIndex现在是最后一次的9. in catch,“String stringPiece = str.substring(lastIndex,str.length());”等于“String stringPiece = str.substring(9,14);”现在,你最终得到了BokVa。