هل يمكن أن يتضمن المفتاح في خاصية Java شخصية فارغة؟
-
22-09-2019 - |
سؤال
نحصل على خصائص (لا يمكننا التأثير عليها) من قاعدة البيانات ونريد الوصول إليها بواسطة رسم خرائط للمفتاح/القيمة. نحن نواجه المشكلة التي تشمل أحد مفاتيح الممتلكات شخصية فارغة.
foo bar = barefoot
هذا - بشكل صحيح - يفسر على النحو التالي
key: foo
value: bar = barefoot
هل هناك طريقة لتضمين الفراغ في المفتاح بحيث لا يتم تفسيرها على أنها المحدد؟ أعتقد أن هذا السلوك مثل المقصود ، لكنني اعتقدت أنني يمكن أن أجربه هنا.
المحلول
كما يبدو يجب أن يكون المحدد =
, ، وليس الفضاء. بالتالي - keyValuePair.split("=")
ينبغي أن تفعل.
إذا كنت تقوم بتحميل هذا من جافا .properties
ملف ، ثم يمكنك تمديده java.util.Properties
وتجاوز هذه الطريقة
public synchronized void load(InputStream inStream) throws IOException
بحيث يتم تحليل الخصائص بشكل صحيح.
نصائح أخرى
يمكنك الهروب من كل شيء في ملف الخصائص باستخدام Java Unicode:
\u003d
إلى عن على=
\u0020
للمسافة البيضاء
فمثلا:
foo bar = barefoot
لا بد وأن:
foo\u0020bar\u0020=\u0020barefoot
لذلك سيكون:
key: "foo bar "
value: " barefoot"
ربما يمكنك الهروب من المساحات البيضاء: foo\ bar = barefoot
تحرير: عفوًا ، لم أر أنه لا يمكنك تغيير الخصائص.
أفترض من خلال "الخصائص" ، تقصد ملف خاصية Java (كما هو مكتوب/قراءة بواسطة java.util.Properties
).
ثم ، وأنت تكتب نفسك ،
foo bar = barefoot
يجب أن يتم تفسيرها بالفعل على أنها
key: foo
value: bar = barefoot
لا توجد طريقة لتكوين هذا باستخدام المدمج Properties
صف دراسي. يجب عليك إما معالجة مدخلاتك (الهروب من المسافة البيضاء ، أو تغييرها إلى _ والعودة ...) أو كتابة محلل الخاص بك. من المحتمل أن تكون كتابة المحلل الخاص بك أفضل ، حيث من الواضح أن مدخلاتك ليست في الحقيقة ملف خصائص Java لتبدأ بـ :-).
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));