java - 从 Java 字符串中解析文本

标签 java regex

我有一个以下格式的字符串:-----BEGIN MESSAGE-----,后跟可变长度加密 session key ,后跟换行符,后跟加密消息,后跟换行符,接下来是数字签名,最后是 -----END MESSAGE-----。

-----BEGIN MESSAGE-----
SNyeWtz8QD8AKdioMG11wu7U6gG2wD9tekvVrx6VYW+6oJj4Wl8NE+7i5MHbu4Au
+vN1Z886lOWka7ekgPF8N7t9MpiFo2pBPHuFcOsaY5ETYuEyk5gaX7BYP7qT6wKG
BRILmX6DblWqGxG2tKs/AdcHDqQ5QBXrP03uhN68wgo=

U2FsdGVkX18gtpQSqyH4H5242SZzcZrb0oH7FWw7/MSCxo7h7BVaesZV2N38sr9y

kVr+wabiNn4RfAB4nNi9gAZHQLok4uxRMALGF2kZk2zpVNPQo6jcdz85fy68gylX
OCQIIdk8JPIwxzHfVvRZqNHDRADZRlNHUMYScjRPU+DB8avghYAVKMJhLgA/2Tdp
a59uBMBg/yB1yqA5FivxPzOhq92Y4nZuP1R9/yGE9O8K
-----END MESSAGE-----

解析这三部分信息( session key 、加密消息和数字签名)的最佳方法是什么?

我尝试使用 Scanner 类,但我不知道使用什么作为分隔符。我也尝试过使用 Pattern 类,但也无法弄清楚该方法。谢谢!

最佳答案

实际上,您在各个部分中嵌入了换行符。分隔它们的是空白行——连续两个换行符。我假设您希望每个部分都删除换行符。我建议采用暴力方法:

StringBuilder sb = new StringBuilder();
String[] parts = input.split("\\r?\\n\\r?\\n"); // should be 3 long
// strip out header and newlines from session key
String[] lines = parts[0].split("\\r?\\n");
for (int i = 1; i < lines.length; ++i) { // skip first line
    sb.append(lines[i]);
}
parts[0] = sb.toString();
// strip out header and newlines from message
sb.setLength(0);
lines = parts[1].split("\\r?\\n");
for (int i = 0; i < lines.length; ++i) {
    sb.append(lines[i]);
}
parts[1] = sb.toString();
// finally, deal with the signature
sb.setLength(0);
lines = parts[2].split("\\r?\\n");
for (int i = 0; i < lines.length - 1; ++i) {
    sb.append(lines[i]);
}
parts[2] = sb.toString();

不太优雅,但它清楚地表明了正在发生的事情。

另一种方法是使用扫描仪读取每一行并决定如何处理它。三行(标题、结尾和空白行)将进行特殊处理并影响处理。否则,只需将读取的每一行附加到 StringBuffer 即可。

关于java - 从 Java 字符串中解析文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914871/

相关文章:

java - TreeSet 到 List 转换中的 Controller 排序

java - 使用java的字符串数组参数错误

java - Java 中的装饰器设计模式 - 为什么它不添加新成分到列表中?

java - 良好的线程设计 : "Method in Thread" or "Thread in Method"

regex - Perl 解析具有一个或多个字段的字符串

java - 严重 : Exception sending context initialized event to listener instance

Python - 从数据行中提取字段名称并重新格式化

JavaScript - 为什么分割不断返回空元素?

mysql - Regex 带来恰到好处的匹配 MySQL

python - 以除空格以外的任何内容开头,以扩展名(.png、.jpg、.mp4、.avi、.flv)结尾