• 締切済み

java初心者の問題

実行時引数IPアドレスを指定したら、そのHost名を表示するプログラムを作成しなさいという問題何ですけど。 どいうプログラムを組めばよいのでしょうか? split()で試したけど、だめでした。 String s [] = ip.split("."); System.out.print(s.length); でsの長さを問い合わせた結果 s.length = 0 です 何でしょうか?

みんなの回答

noname#33813
noname#33813
回答No.3

>String s [] = args[0].split("."); splitメソッドは正規表現扱いになります。 正規表現でピリオドは特別な意味を持ちますので String s [] = args[0].split("\\."); ←とか String s [] = args[0].split("[.]"); ←とかにしないと正しく分割できません。 >for(int i = 0;i<s.length;i++){ >r[i] = getByte(s[i]); >} getByteメソッドで何をやりたいのかよくわかりません。 ここは独自メソッドは不要で for(int i = 0;i<s.length;i++){ r[i] = new Integer(s[i]).byteValue(); } のような変換で済む話でしょう。 以上の修正で正しく動くことを確認しましたよ。

daihou
質問者

お礼

ありがとうございました。

daihou
質問者

補足

お返事ありがとうございます。 これで正しく動きました。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

OSがWindowsならばIP>Host名とくれば NSLOOKUPではないでしょうか? 例えば import java.io.*; class Nslookup { public static void main(String[] args){ try { Process process=Runtime.getRuntime().exec("cmd /c nslookup www.nifty.com"); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e){ System.err.println("エラー"); e.printStackTrace(); } } }

daihou
質問者

補足

お返事ありがとうございます。 OSはWindowsです 実行時引数IPアドレスを指定するので Processで指定しなくても大丈夫みたいです

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

授業の問題のようなので、ヒントだけ。。。 まず、文字列の分割とか合成とかそういう問題ではありません。 IPアドレスとは何か? また、ホスト名とは何か? というのがわからないとお話になりません。 例として、 IPアドレス:210.80.243.9 のホスト名は、ns10.yahoo.co.jp です。

daihou
質問者

補足

お返事ありがとうございます。 ちなみに自分はこんな感じで組みました。 だけど、正しいけどは得られないのです。 どこが間違ってるでしょうか? public class NetTest01 { public static void main(String[] args) { if(args.length != 1){ System.exit(-1); } String s [] = args[0].split("."); byte r [] = new byte[4]; for(int i = 0;i<s.length;i++){ r[i] = getByte(s[i]); } print(r); } static void print(byte[] b) { InetAddress iad = InetAddress.getByAddress(b); System.out.println("ホストネームは:"+iad.getHostName()); } static byte getByte(String s){ int r = 0; for(int i = 0;i < s.length();i++){ r = 10*r + (int)s.charAt(i); } return (byte)r; } }

関連するQ&A