需要将Visual Basic .NET代码移植到Java

时间:2012-03-02 23:37:15

标签: java vb.net

    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();
      }
    }
  }

2 个答案:

答案 0 :(得分:2)

在不知道您失败的确切行(错误代码给出行号,但我不知道与您的文件的相关性)的情况下,我唯一注意到的是这一行:

if(x <= mapwidth){

可能是一次性的错误。我认为VB是基于1的,而Java是基于零的,但它只是猜测你可能想要&lt;而不是&lt; =你能让我们知道NPE在哪一行。

这也错了:

if(str == ""){

需要是“str.equals(”“)”或“str.length()== 0”

但我没有看到任何可能导致循环中的NPE的内容

另外你在循环中分配换行符并且你从不在该范围内使用换行符,所以如果它退出并且你有另一个“换行符”并且你期望它被设置 - 请不要屏住呼吸。

答案 1 :(得分:0)

如果您发布了错误,那么您可能会得到更好的答案但不知道您尝试解析的内容,看起来您正在围绕要解析的数据进行假设。