java:方括号的属性文件转义序列

Posted

技术标签:

【中文标题】java:方括号的属性文件转义序列【英文标题】:java : properties file escape sequence for square bracket 【发布时间】:2014-06-10 20:32:21 【问题描述】:

需要在值的开头转义 [。

我正在使用 PropertyResourceBundle 读取属性文件,并且我有一个属性,其值以方括号开头,例如

myapp.add.user.email.selfRegistration.subject=[MYAPP] Welcome to MYAPP

当我尝试读取此文件时,出现以下异常

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to
java.lang.String    at
java.util.ResourceBundle.getString(ResourceBundle.java:355)

我正在使用 jdk7

【问题讨论】:

【参考方案1】:

java.util.PropertyResourceBundle 基于java.util.Properties。从技术上讲,java.util.Properties 实现了Map<Object,Object>,但是当您从文件加载属性时,键和值仅限于String(检查java.util.Properties.load() 方法的来源)。并且'['字符在属性文件格式中没有特殊含义。

因此,如果您的所有资源包确实基于属性文件,则由于尝试将String[] 转换为String,因此不可能获得ClassCastException

您很可能有一个基于ListResourceBundle 的包(或ResourceBundle 的自定义子类),它可以包含任何类型的值,包括数组。

并且可以混合使用具有相同基本名称的基于属性和基于类的资源包,例如,默认资源包可以是属性文件,而特定于语言环境的子包是基于ListResourceBundle

【讨论】:

是的 ListResourceBundle 工作;但现在我扩展了PropertyResourceBundle 来处理我的情况。【参考方案2】:

我对下面的程序进行了同样的尝试,我可以毫无例外地从我的程序中获取输出

你能检查一下,如果有任何其他问题,请告诉我

package com.kb;

import java.util.Enumeration;
import java.util.ResourceBundle;

public class ResourceBundleTest 
    public static void main(String[] args) 

        ResourceBundle rb = ResourceBundle.getBundle("mybundle");
        Enumeration <String> keys = rb.getKeys();
        while (keys.hasMoreElements()) 
            String key = keys.nextElement();
            String value = rb.getString(key);
            System.out.println(key + ": " + value);
        
    


【讨论】:

"String value = rb.getString(key);" 仍然抛出相同的异常 我使用的是 java 版本 7 我刚才在Java 7中运行了上面的代码......它工作得很好......请检查你的代码是否正在读取任何asString数组并放入String,因为这种异常只发生在String[] 赋值给 String。否则发布您的整个代码将对其进行查看..

以上是关于java:方括号的属性文件转义序列的主要内容,如果未能解决你的问题,请参考以下文章

php 数组转换json中括号转义

Java 无效的转义序列

命令行参数中的转义序列 (Java)

Java初学者-转义序列[重复]

java 字符串转义序列

从C#目录中删除转义序列