Try
Dim sr As New IO.StreamReader(Mapfile & ".txt")
'Dim intValue As String = ""
Dim strLine As String = ""
Dim X As Integer = 0
Dim Y As Integer = 0
Do Until sr.EndOfStream
strLine = sr.ReadLine
strLine = strLine.Replace(strLine.LastIndexOf(","), "")
For Each item As String In Split(strLine, ",", -1)
'MsgBox("X:" & X & " Y:" & Y & "= " & item)
If item = "" Then
item = 0
End If
If X <= MapWidth Then
Map(X, Y, 0) = Int(item)
End If
X = X + 1
Next
X = 0
Y = Y + 1
Loop
sr.Close()
sr.Dispose()
Catch ex As Exception
MsgBox("Map: " & Mapfile & " could not be loaded." & vbCrLf & vbCrLf & ex.Message, MsgBoxStyle.Critical, "ERROR")
IsOn = False
End Try
尝试将此代码从Visual Basic移植到Java。我尝试使用缓冲读卡器但似乎没有任何东西可以实现它。上面的代码是针对Visual Basic的,下面的代码是我的java端口似乎没有相同的工作。 http://pastebin.com/freXYTi3
public void readFile(Context c) {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(c.getAssets().open("map1.txt")));
String line = null;
String newLine = "";
int x = 0;
int y = 0;
while ((line = br.readLine()) != null) {
int length = line.length();
String lastChar = line.substring(length-1);
if (lastChar.contains(",")) {
newLine = line.substring(0,length-1) + "";
}
//line = line.substring(0, line.lastIndexOf(",")) + "";
for (String str : line.split(",", -1)) {
System.out.println(str);
if(str == ""){
str = "0";
}
if(x <= mapwidth){
System.out.println(x + " " + y);
int N = Integer.parseInt(str);
Map[x][y] = N;
}
x = x + 1;
}
x = 0;
y = y + 1;
}
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
finally {
try {
if (br != null)
br.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
答案 0 :(得分:2)
在不知道您失败的确切行(错误代码给出行号,但我不知道与您的文件的相关性)的情况下,我唯一注意到的是这一行:
if(x <= mapwidth){
可能是一次性的错误。我认为VB是基于1的,而Java是基于零的,但它只是猜测你可能想要&lt;而不是&lt; =你能让我们知道NPE在哪一行。
这也错了:
if(str == ""){
需要是“str.equals(”“)”或“str.length()== 0”
但我没有看到任何可能导致循环中的NPE的内容
另外你在循环中分配换行符并且你从不在该范围内使用换行符,所以如果它退出并且你有另一个“换行符”并且你期望它被设置 - 请不要屏住呼吸。
答案 1 :(得分:0)
如果您发布了错误,那么您可能会得到更好的答案但不知道您尝试解析的内容,看起来您正在围绕要解析的数据进行假设。