扫描仪命中空行抛出 ArrayIndexOutOfBoundsException
Scanner hit empty line throw ArrayIndexOutOfBoundsException
扫描器命中空行抛出 ArrayIndexOutOfBoundsException
我的代码在遇到空行时会抛出 ArrayIndexOutOfBoundsException,我该如何解决这个问题?
例如,示例文本文件的第 3 行是空行,将引发异常。
扫描器命中空行抛出 ArrayIndexOutOfBoundsException
示例文本文件
This is an
Example
for this
Class
ABC
DEF
G
H
IIIIII
XYZ
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
class Test
{
// A utility function to get max of two integers
static int max (int x, int y) { return (x > y)? x : y; }
// Returns the length of the longest
// palindromic subsequence in seq
static int lps(String seq)
{
int n = seq.length();
int i, j, cl;
// Create a table to store results of subproblems
int L[][] = new int[n][n];
// Strings of length 1 are palindrome of lentgh 1
for (i = 0; i < n; i++)
L[i][i] = 1;
// Build the table. Note that the lower
// diagonal values of table are
// useless and not filled in the process.
// The values are filled in a manner similar
// to Matrix Chain Multiplication DP solution (See
// https://www.geeksforgeeks.org/matrix-chain-multiplication-dp-8/).
// cl is length of substring
for (cl=2; cl<=n; cl++)
{
for (i=0; i<n-cl+1; i++)
{
j = i+cl-1;
if (seq.charAt(i) == seq.charAt(j) && cl == 2)
L[i][j] = 2;
if (seq.charAt(i) == seq.charAt(j))
L[i][j] = L[i+1][j-1] + 2;
else
L[i][j] = max(L[i][j-1], L[i+1][j]);
}
}
return L[0][n-1];
}
/* Driver program to test above functions */
public static void main(String args[]) throws FileNotFoundException
{
Scanner file = new Scanner(new File("Sample.txt"));
while (file.hasNextLine()) {
String input = file.nextLine();
String seq = input.toUpperCase().replaceAll("\P{Alnum}", "");
System.out.println("The length of the lps is "+ lps(seq));
}
}
}
简单。只需在字符串中添加一个“isBlank”检查即可。
public static void main(String args[]) throws FileNotFoundException
{
Scanner file = new Scanner(new File("src/main/resources/Sample.txt"));
while (file.hasNextLine()) {
String input = file.nextLine();
if(!input.isBlank()){
String seq = input.toUpperCase().replaceAll("\P{Alnum}", "");
System.out.println("The length of the lps is "+ lps(seq));
}
}
}
它给出这样的输出:
The length of the lps is 3
The length of the lps is 3
The length of the lps is 1
The length of the lps is 2
The length of the lps is 1
The length of the lps is 1
The length of the lps is 1
The length of the lps is 1
The length of the lps is 6
The length of the lps is 1
虽然@Abhinaba 的解决方案确实修复了您遇到的当前错误,但是当输入文件包含仅包含非字母数字字符的行时它会失败。例如:
This is an
Example
for this
Class
ABC
DEF
G
H
IIIIII
XYZ
#$%^
您可以将解决方案修改为:
public static void main(String args[]) throws FileNotFoundException {
Scanner file = new Scanner(new File("Sample.txt"));
while (file.hasNextLine()) {
String input = file.nextLine();
String seq = input.toUpperCase().replaceAll("\P{Alnum}", "");
if (!seq.isBlank()) {
System.out.println("The length of the lps is "+ lps(seq));
}
}
}
扫描器命中空行抛出 ArrayIndexOutOfBoundsException 我的代码在遇到空行时会抛出 ArrayIndexOutOfBoundsException,我该如何解决这个问题? 例如,示例文本文件的第 3 行是空行,将引发异常。
扫描器命中空行抛出 ArrayIndexOutOfBoundsException
示例文本文件
This is an
Example
for this
Class
ABC
DEF
G
H
IIIIII
XYZ
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
class Test
{
// A utility function to get max of two integers
static int max (int x, int y) { return (x > y)? x : y; }
// Returns the length of the longest
// palindromic subsequence in seq
static int lps(String seq)
{
int n = seq.length();
int i, j, cl;
// Create a table to store results of subproblems
int L[][] = new int[n][n];
// Strings of length 1 are palindrome of lentgh 1
for (i = 0; i < n; i++)
L[i][i] = 1;
// Build the table. Note that the lower
// diagonal values of table are
// useless and not filled in the process.
// The values are filled in a manner similar
// to Matrix Chain Multiplication DP solution (See
// https://www.geeksforgeeks.org/matrix-chain-multiplication-dp-8/).
// cl is length of substring
for (cl=2; cl<=n; cl++)
{
for (i=0; i<n-cl+1; i++)
{
j = i+cl-1;
if (seq.charAt(i) == seq.charAt(j) && cl == 2)
L[i][j] = 2;
if (seq.charAt(i) == seq.charAt(j))
L[i][j] = L[i+1][j-1] + 2;
else
L[i][j] = max(L[i][j-1], L[i+1][j]);
}
}
return L[0][n-1];
}
/* Driver program to test above functions */
public static void main(String args[]) throws FileNotFoundException
{
Scanner file = new Scanner(new File("Sample.txt"));
while (file.hasNextLine()) {
String input = file.nextLine();
String seq = input.toUpperCase().replaceAll("\P{Alnum}", "");
System.out.println("The length of the lps is "+ lps(seq));
}
}
}
简单。只需在字符串中添加一个“isBlank”检查即可。
public static void main(String args[]) throws FileNotFoundException
{
Scanner file = new Scanner(new File("src/main/resources/Sample.txt"));
while (file.hasNextLine()) {
String input = file.nextLine();
if(!input.isBlank()){
String seq = input.toUpperCase().replaceAll("\P{Alnum}", "");
System.out.println("The length of the lps is "+ lps(seq));
}
}
}
它给出这样的输出:
The length of the lps is 3
The length of the lps is 3
The length of the lps is 1
The length of the lps is 2
The length of the lps is 1
The length of the lps is 1
The length of the lps is 1
The length of the lps is 1
The length of the lps is 6
The length of the lps is 1
虽然@Abhinaba 的解决方案确实修复了您遇到的当前错误,但是当输入文件包含仅包含非字母数字字符的行时它会失败。例如:
This is an
Example
for this
Class
ABC
DEF
G
H
IIIIII
XYZ
#$%^
您可以将解决方案修改为:
public static void main(String args[]) throws FileNotFoundException {
Scanner file = new Scanner(new File("Sample.txt"));
while (file.hasNextLine()) {
String input = file.nextLine();
String seq = input.toUpperCase().replaceAll("\P{Alnum}", "");
if (!seq.isBlank()) {
System.out.println("The length of the lps is "+ lps(seq));
}
}
}