2015-10-16 2 views
1

Я хотел бы использовать этот метод для преобразования двумерного массива в строку в файл свойств. Затем импортируйте его из свойств, преобразуя строку свойств обратно в 2D-массив. Но у меня возникают трудности с преобразованием строки в 2D-массив.Преобразование «deepToString()» назад в 2D-массив

EDIT: Я хочу изменить вывод строки 2D массива обратно в 2D-массив. Но question, который вы мне дали, не помогает мне с 2D-массивом. Поскольку Arrays.replace() не может заменить внутренний массив 2D-массива.

Вот мой код:

public static void getSettings(){ 
try { 
File file = new File("config.properties"); 
Properties p = new Properties(); 
FileInputStream fileInput = new FileInputStream(file); 
//Import 
moduleNames = p.getProperty("moduleNames").split(""); 
moduleData = ??? //I don't know how to convert String to String[][] 
} 
catch (Exception e){ 
e.printStackTrace(); 
} 
} 

Вот еще одна функция, чтобы установить свойство:

public static void writeFile(String[][] mD, String[] mN){ 
try{ 
Properties p = new Properties; 
File file = new File("config.properties"); 

p.setProperty("moduleData", Arrays.deepToString("mD")); 
p.setProperty("moduleNames", Arrays.toString("mN")); 
//...further more code to flush the data out 
} catch (Exception e){ 
e.printStackTrace(); 
} 

} 

Может кто-нибудь сказать мне, как преобразовать String (от deepToString) обратно в строку [] []?

Мой проект находится в Open source. Это: Conf.java Line271 - это набор свойств один.

И это: Conf.java Line215 - это нагрузка String на String [] [] one.

+2

Проверить http://stackoverflow.com/questions/456367/reverse-parse-the-output-of-arrays-tostringint – Tom

+0

@Tom Вы можете проголосовать за дубликат. – YoungHobbit

+2

В java API нет метода, который автоматически преобразует это обратно в массив, который я знаю. кто-то уже сделал то, что вам нужно: [stringToDeep] (http://stackoverflow.com/a/22428926/4088809) @YoungHobbit :) –

ответ

0

Я не мог найти никакого стандартного метода, который мог бы это сделать. Но используя идеи из here я сформулировал следующее:

 String[][] sample = new String[][]{{"Apple", "Ball"},{"Cat", "Dog"}, {"Elephant, Fish"} }; 
     String temp = Arrays.deepToString(sample); 
     String[] strings = temp.replace("[", "").replace("]", ">").split(", "); 
     List<String> stringList = new ArrayList<>(); 
     List<String[]> tempResult = new ArrayList<>(); 
     for(String str : strings) { 
      if(str.endsWith(">")) { 
       str = str.substring(0, str.length() - 1); 
       if(str.endsWith(">")) { 
        str = str.substring(0, str.length() - 1); 
       } 
       stringList.add(str); 
       tempResult.add(stringList.toArray(new String[stringList.size()])); 
       stringList = new ArrayList<>(); 
      } else { 
       stringList.add(str); 
      } 
     } 
     String[][] originalArray = tempResult.toArray(new String[tempResult.size()][]); 

Это имеет много возможности для улучшения, и я надеюсь, что вы будете делать это. Это просто для подсказки для преобразования строки в 2D-массив.

+0

Спасибо! Ваш код помогает мне. Но комментарий Тахара Бакира решил мою проблему. – mob41

Смежные вопросы