هل يمكن أن يتضمن المفتاح في خاصية Java شخصية فارغة؟

StackOverflow https://stackoverflow.com/questions/2108103

  •  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("="));  
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top