我有一个css文件,其中包含以下类型的文字:
:
我希望格式化文本,以便返回类似的内容:
.fa-glass:before {
content: "\f000";
}
.fa-music:before {
content: "\f001";
}
.fa-search:before {
content: "\f002";
}
我做了一些研究并在SO上找到了很多代码并尝试了以下
GLASS(f000),
MUSIC(f001),
SEARCH(f0002)
得到了这个结果:
String result = cssFile.substring(cssFile.indexOf("-") + 1, cssFile.indexOf(":b") +1);
我既不想要名字后面的“:”,也不想要空行。我知道为什么它会像这样回归。这是因为在源文件中{}内的文本和括号本身在3行中展开。因为当我删除+1时我得到异常:字符串索引超出范围:-1。 有没有办法用java将第二个大括号和大括号内的文本移动到第一行?我不想手动操作,因为有更多的tan 1000条目。 感谢
答案 0 :(得分:1)
问题是,当该行不包含字符" - "时,您的表达式不匹配也不是角色":"。
那是空行的情况:
.fa-glass:before {
:包含":"和" - "所以它产生:glass:
content: "\f000";
不包含":"所以你的代码产生一个空字符串(cssFile.substring(0, 0)=""
)等等。
我编写了一个简单的测试代码,可以执行您想要的操作:
@Test
public void testConcat() throws Exception {
/*
* String that simulates a file with this content:
* .fa-glass:before {
* content: "\f000";
* }
* .fa-music:before {
* content: "\f001";
* }
* .fa-search:before {
* content: "\f002";
* }
*/
String cssFile = ".fa-glass:before {\n content: \"\\f000\";\n}\n.fa-music:before {\n content: \"\\f001\";\n}\n.fa-search:before {\ncontent: \"\\f002\";}";
BufferedReader br = new BufferedReader(new StringReader(cssFile));
String line = null;
String name = null;
String value = null;
StringBuilder result = new StringBuilder();
while( (line = br.readLine()) != null) {
if(line.contains(".fa-")) {
name = line.substring(line.indexOf(".fa-") + 4, line.indexOf(":")).toUpperCase();
} else if(line.contains(";")){
value = line.substring(line.indexOf(": \"") + 3, line.lastIndexOf("\""));
result.append(String.format("%s(%s)\n", name, value));
}
}
/*
* It will print:
* GLASS(\f000)
* MUSIC(\f001)
* SEARCH(\f002)
*/
System.out.println(result.toString());
assertThat(result.toString()).isEqualTo("GLASS(\\f000)\nMUSIC(\\f001)\nSEARCH(\\f002)\n");
}
答案 1 :(得分:1)
以下代码实现了相同的目标。代码不是最佳的,因为我需要赶时间。请通过使用Stringbuffers以及任何适用的地方进行优化。
File f=new File("test.css");
BufferedReader br=new BufferedReader(new FileReader(f));
String ln;
StringBuffer sb=new StringBuffer();
while((ln=br.readLine())!=null){
sb.append(ln);
}
String[] sections=sb.toString().split("}");
for(String st:sections){
String temp=st.substring(st.indexOf("-")+1, st.indexOf(":")).toUpperCase()+"("+st.substring(st.indexOf("\\")+1, st.indexOf("\";"))+")";
System.out.println(temp);
}
输出:
GLASS(F000)
MUSIC(F001)
SEARCH(F002)
答案 2 :(得分:0)
如果您有notepad ++(或任何文本编辑器可以"替换所有"基于模式 - 我已经使用了notepad ++和为此选择的扩展'搜索模式 - 你可以很快地做出改变。
第一次找到{\ r \ n,用空字符串替换。 第二次,找到\ r \ n},替换为空字符串。
最终结果是
.fa-glass:before content: "\f000";
.fa-music:before content: "\f001";
.fa-search:before content: "\f002";
如果您希望保留花括号,则只需更改'替换为'更换期间的部分