java中的子串IP地址

时间:2010-05-29 05:02:17

标签: java substring

这个程序采用类似于192.168.1.125的字符串并剪切每个数字然后将其转换为整数,但它会返回错误。

import java.lang.String;
import java.lang.Number;
import java.lang.Integer;
class Ip
{
   public static void main ( String [] args )
   {

      int i ;
      i = args[0].indexOf ( '.' );
      do
      {
         if ( i != -1 )
            args[0].substring ( 0, i );
         String str = args[0].substring ( i + 1, args[0].length() );
         String str2 = Integer.parseInt ( str );
         System.out.println ( str2 );
      }
      while ( i != -1 );
   }
}

3 个答案:

答案 0 :(得分:1)

Integer.parseInt返回一个整数,而不是一个字符串(它的全部内容是创建一个整数):

String str2 = Integer.parseInt ( str );

注意,编译器发出了错误,你应该试着找出它告诉你的内容:

Ip.java:16: incompatible types
found   : int
required: java.lang.String
         String str2 = Integer.parseInt ( str );

答案 1 :(得分:1)

parseInt

parseInt需要String并返回int。以下是使用该方法的简单示例:

    int num = Integer.parseInt("42");
    System.out.println(num == 42); // prints "true"

API参考

  • int parseInt(String s)
    • 参数: s - 包含要解析的int表示的字符串
    • 返回:十进制参数表示的整数值。

至于您的问题,最简单的解决方案是使用java.util.Scanner

     import java.util.*;
     //...

     Scanner sc = new Scanner("192.168.1.125").useDelimiter("\\.");
     int[] parts = new int[] {
         sc.nextInt(), sc.nextInt(), sc.nextInt(), sc.nextInt()
     };
     System.out.println(Arrays.toString(parts));
     // prints "[192, 168, 1, 125]"

唯一不直接的部分是\\.,这就是你如何在Java中将\.写成字符串文字。您需要\的原因是因为useDelimiter采用正则表达式,而正则表达式中.是一个元字符,因此您需要将其转义以匹配文字点。

API参考

另见

答案 2 :(得分:0)

您丢弃第一个子字符串的结果,并为字符串分配整数(如Klatchko所述)。此外,如果使用for循环,则可以简化,因为IPv4地址始终具有4个组件。这假设您无法使用String.split或类似内容。