我有以下兩個字串:
String margin1 = "-1100px";
String margin2 = "-1000px";
String margin3 = "-1300px";
有人可以幫助我根據字串中的數值比較 make 條件嗎?例如:
if (/*Numerical value of*/ margin1 /*is between*/ margin2 /*and*/ margin3)
break;
預先感謝您的幫助。
uj5u.com熱心網友回復:
您可以使用 Integer.parseInt 和 String.replace。你可以這樣做
if(
Integer.parseInt(margin1.replace("px","")) >= Integer.parseInt(margin2.replace("px",""))
&& Integer.parseInt(margin1.replace("px","")) <= Integer.parseInt(margin3.replace("px",""))
)
break;
uj5u.com熱心網友回復:
可以有很多方法來做到這一點。下面給出了一種通過決議給定字串ParsePosition然后比較數值的方法:
import java.text.NumberFormat;
import java.text.ParsePosition;
public class Main {
public static void main(String[] args) {
String margin1 = "-1100px";
String margin2 = "-1000px";
String margin3 = "-1300px";
NumberFormat formatter = NumberFormat.getInstance();
int intMargin1 = formatter.parse(margin1, new ParsePosition(0)).intValue();
int intMargin2 = formatter.parse(margin2, new ParsePosition(0)).intValue();
int intMargin3 = formatter.parse(margin3, new ParsePosition(0)).intValue();
if ((intMargin1 > intMargin2 && intMargin1 < intMargin3)
|| (intMargin1 < intMargin2 && intMargin1 > intMargin3))
System.out.println(margin1 " is between " margin2 " and " margin3);
else
System.out.println(margin1 " is between " margin2 " and " margin3);
}
}
輸出:
-1100px is between -1000px and -1300px
ONLINE DEMO
uj5u.com熱心網友回復:
如前所述,更簡單的解決方案可能是基于String::replace/replaceAll Integer.parseInt從包含 suffix 的字串中獲取整數值px:
public static int getMarginSimple(String marginPx) {
return Integer.parseInt(marginPx.replace("px", ""));
}
另一種方法可能使用的事實是可能不會使用給定 string 的整個文本,即所有后綴都被悄悄丟棄。NumberFormat::parse
但是,NumberFormat不是執行緒安全的,應該為每個執行緒創建一個單獨的實體(例如使用ThreadLocal):
private static final ThreadLocal<DecimalFormat> DEFAULT_FORMATTER = ThreadLocal
.withInitial(() -> new DecimalFormat());
public static int parseMargin(String margin) {
try {
return DEFAULT_FORMATTER.get().parse(margin).intValue();
} catch (ParseException pex) {
throw new IllegalArgumentException("Failed to parse " margin, pex);
}
}
但是,這將使不同單位的邊距“具有可比性”:
int in2000 = parseMargin("2000in");
int mm200 = parseMargin("-200mm");
int px300 = parseMargin("300px");
System.out.printf("m1=%d, m2=%d, m3=%d%n", in2000, mm200, px300);
m1=2000, m2=-200, m3=300
因此,應該自定義模式以'px'強制使用后綴:
private static final String PIXEL_FORMAT = "#px;-#px";
private static final ThreadLocal<DecimalFormat> PIXEL_FORMATTER = ThreadLocal
.withInitial(() -> new DecimalFormat(PIXEL_FORMAT));
static int parseMarginPx(String marginPx) {
try {
return PIXEL_FORMATTER.get().parse(marginPx).intValue();
} catch (ParseException pex) {
throw new IllegalArgumentException("Failed to parse margin in pixels: " marginPx, pex);
}
}
然后以像素為單位的邊距被決議和處理如下:
int m1 = parseMarginPx("1000px");
int m2 = parseMarginPx("-1200px");
int m3 = parseMarginPx("1300px");
System.out.printf("m1=%d, m2=%d, m3=%d%n", m1, m2, m3);
if (Math.min(m2, m3) <= m1 && m1 <= Math.max(m2, m3)) {
System.out.printf("Margin m1=%dpx is between m2=%dpx and m3=%dpx%n", m1, m2, m3);
} else {
System.out.printf("Margin m1=%dpx is NOT between m2=%dpx and m3=%dpx%n", m1, m2, m3);
}
輸出
m1=1000, m2=-1200, m3=1300
Margin m1=1000px is between m2=-1200px and m3=1300px
uj5u.com熱心網友回復:
我將使用正則運算式來提取模型(- 或 )第二個(整數)和最后一個(px)您可以在您的 Java 代碼中使用此正則運算式:[ |-]?[0-9] px$
您可以在此處進行測驗:https://www.freeformatter .com/java-regex-tester.html#ad-output
private static final Pattern p = Pattern.compile("^[ |-]?[0-9] px$");
private int parseCssToken(String token){
Matcher m = p.matcher(token); // token = "-1200px"
if (m.find()) {
// ...then you can use group() methods.
return Integer.parseInt(m.group(1)); // this will extract 1200
}
// throw Exception here if you don't have any match
}
:
:
// further, you can use your method like this :
if (parseCssToken(margin1) >= parseCssToken(margin2) &&
parseCssToken(margin1) <= parseCssToken(margin3)){
// your logic here
:
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321991.html
上一篇:正則運算式查找連接的文本
