如何将 #ffffff
转换为 #fff
或将 #fff
转换为 #ffffff
以进行断言?
我正在使用 getCssValue("background")
从 Selenium 返回 rgb(255, 255, 255)
我可以拆分成:
- r ->
255
- g ->
255
- b ->
255
下面一行代码:
String hex = String.format("#%02x%02x%02x", r, g, b);
将 rgb 转换为 hex 并给出如下输出:
#ffffff
但是从控制台中,背景被提取为#fff
那么理想的方法是:
- 将
#ffffff
转换为#fff
- 将
#fff
转换为#ffffff
我经历过一些相关的讨论:
- Why use #fff color on body?其中提到该问题有些主观。
- CSS: Which is faster for the browser? color:#fff; or color:#ffffff;其中提到 CSS 压缩器将智能优化到 #fff 版本。
但是我的测试失败了,需要转换。有什么建议吗?
最佳答案
您可以将 replaceAll
与正则表达式一起使用,以查找所有三个部分都使用相同数字的情况:
static String getHex(int r, int g, int b) {
return String.format("#%02x%02x%02x", r, g, b).replaceAll("^#([a-fA-F])\\1([a-fA-F])\\2([a-fA-F])\\3$", "#$1$2$3");
}
它会查找以 #
开头,后跟三对匹配的十六进制数字的字符串,并仅用短形式替换它们。 (我想我可以在你的特定示例中使用[a-f]
而不是[a-fA-F]
,因为你知道你'只会变得小写,但是......)
完整示例(在 Ideone 上):
public class Example {
public static void main(String[] args) {
System.out.println(getHex(255, 255, 255)); // #fff
System.out.println(getHex(255, 240, 255)); // #fff0ff
}
static String getHex(int r, int g, int b) {
return String.format("#%02x%02x%02x", r, g, b).replaceAll("^#([a-fA-F])\\1([a-fA-F])\\2([a-fA-F])\\3$", "#$1$2$3");
}
}
关于java - 如何在断言 Selenium getCssValue ("background"返回的背景色 rgb(255,255,255) 时将#ffffff 转换为#fff 或将#fff 转换为#ffffff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767206/