我有一組初始數據,可以用兩種不同的格式進行匹配。這些條目可以是完全匹配或提供範圍。範圍值將是十進制格式的整數 - 但要匹配的數據可以是十六進制和十進制。基地將在初始數據內顯示。因此,最初的數據看起來像下面(JSON格式):如何將字符串轉換爲Java中的不同類?
[
{"value":"X"},
{"value":"Y"},
{"START":"0000", "END":"0010", "INPUTBASE":"10"},
{"START":"0200", "END":"0300", "INPUTBASE":"16"}
]
所以我需要一個功能類似boolean contains(final String value)
會檢查是否值包含在「守護者」中設置的串X,Y ,8,FF將全部命中 - FF作爲十六進制數(多個比賽不是問題)。我所做的是創造兩個單一的值與一個Range s包裹基地。我的代碼是類似如下:
Set<WrappedRange> wrappedRangeSet;
Set<String> singleEntrySet;
public boolean contains(final String value) {
return singleEntrySet.contains(value) || valueInRange(value);
}
private boolean valueInRange(final String incoming) {
Long value;
for(WrappedRange<Long> wrappedRange : wrappedRangeSet) {
try {
value = Long.valueOf(incoming, wrappedRange.getBase());
} catch (NumberFormatException nfe) {
continue; // not worried if wrong format...
}
if (wrappedRange.contains(value)) {
return true;
}
}
return false;
}
的WrappedRange樣子:
class WrappedRange<C Extends Comparable> {
private final int base;
private final Range<C> range;
public WrappedRange(final Range<C> range, final int base) {
this.range = range;
this.base = base;
}
public boolean contains(final C value) {
return range.contains(value);
}
public int getBase() {
return int base;
}
}
在最低限度,我想擺脫WrappedRange.getBase()
方法,並從字符串移動轉換爲所需的類型進入WrappedRange類。然後可以將contains(String)
方法添加到WrappedRange
類。在valueInRange
方法中的循環被簡化爲:
for(WrappedRange<Long> wrappedRange : wrappedRangeSet) {
if (wrappedRange.contains(value)) {
return true;
}
}
我遇到的問題是,我所做的假設,我比較值是一個長期的,而不是任何擴展可比。我可以修復WrappedRange以使用Longs,但是我不能將該類用於其他可比較對象。
理想情況下,我想限制字符串到WrappedRange類的轉換,因爲可能有其他擴展的Comparable將來可能用於輸入包含函數。該班級看起來如下所示:
class WrappedRange<C Extends Comparable> {
private final int base;
private final Range<C> range;
public WrappedRange(final Range<C> range, final int base) {
this.range = range;
this.base = base;
}
public boolean contains(final C value) {
return range.contains(value);
}
public boolean contains(final String incoming) {
C value = convert(incoming);
return range.contains(value);
}
private convert(final String incoming) {
// ... convert to type C and return.
}
}
有沒有簡單的方法來做到這一點?它甚至有可能嗎?
你有沒有嘗試反序列化Json到Java對象,然後驗證/比較特定的值? –
以JSON格式化的初始集合,它被反序列化以填充集合,但是如果它們存在於集合中,那麼接收到的數據將會是直的字符串。所以我不清楚這可能會有什麼幫助。 – robert