2016-06-13 80 views
1

我是Java新手,非常抱歉,如果這是一個簡單的問題。我正在嘗試生成一個隨機IP地址。我分別產生4個數字,並希望他們格式化像####如何格式化字符串,如#。#。#。#

我的代碼如下:。

static final Random _random = new Random(Integer.parseInt(seed)/2); 

String ip = String.format(
    Locale.US, 
    "#.#.#.#", 
    _random.nextInt((254 - 1) + 1) + 1, 
    _random.nextInt((254) + 1), 
    _random.nextInt((254) + 1), 
    _random.nextInt((254 - 1) + 1) + 1 
); 

我收到錯誤

太多格式字符串參數(找到:4,預期:0)

我在做什麼錯?

+1

[This](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format(java.util.Locale,%20java.lang.String,%20java .lang.Object ...))和[this](https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax)應該可以幫到你。 – Gendarme

+0

考慮使用char數組來構建字符串,然後使用該數組初始化String對象,前提是您無法理解String.format如何工作。 –

+3

什麼@Gendarme說的是,如果你*閱讀文檔*,你會找到答案,這是格式化指令以'%'符號開頭,'D'爲十進制整數,所以使用' %D'。 – Andreas

回答

3

我認爲你需要的只是一個範圍,並將其分配給您的字符串(沒有太多的絨毛):

final Random random = new Random(); 
final String ip = String.format("%d.%d.%d.%d", random.nextInt(255) + 1, 
    random.nextInt(256), random.nextInt(256), random.nextInt(255) + 1); 
//System.out.printf("%s%n", ip); 
+0

我注意到你刪除了隨機值的範圍。我應該這樣做嗎?我試圖只生成有效的ips?第一個和最後一個數字不能爲0. –

+1

如果是這樣,您需要爲那些(第一個和最後一個)添加'1'; 'nextInt(int bound)'將返回'0'(含)和指定值(不含)之間的「僞隨機」int值。 –

2

可以使用上述方法,或爲#格式化您可以使用DecimalFormat

Random random = new Random(); 
DecimalFormat format = new DecimalFormat("###"); 
String value = new StringBuilder() 
     .append(format.format(random.nextInt(256))).append(".") 
     .append(format.format(random.nextInt(256))).append(".") 
     .append(format.format(random.nextInt(256))).append(".") 
     .append(format.format(random.nextInt(256))).toString();