2015-11-22 1 views
0

есть ли способ получить char [] из String в java и имеет сложность пространства = O (1)?String to char array с пространственной сложностью O (1)

Я стараюсь с toCharArray но сложность пространства = O (п)

+4

Вы имеете в виду без копирования строки? Не без опасного отражения. –

+2

Зачем вам это нужно? –

+0

У меня есть домашняя работа: со строковым вводом, отмените эту строчку на слово со сложностью O (1). Ex: Input: Я супермен -> вывод: супермен am I. Я решил его путем swap char в этой String, но у меня возникла проблема, когда get char [] из этой String для подкачки. Я рассматриваю StringBuilder, но сложность пространства не O (1) –

ответ

2

Существует один возможный способ сделать это, но это НЕ НА ВСЕ РЕКОМЕНДАЦИИ. Вы можете использовать API Java Reflection API, чтобы получить личное поле value из строкового класса, который является вашим типом char[], а затем получить значение этого поля для объекта. Вы можете сделать это, используя следующий код:

Field valueField = String.class.getDeclaredField("value"); 
field.setAccessible(true); 

String str = "This is my String"; 
char[] charArr = (char[]) valueField.get(str); 

Изменения значения массива символов могут испортить вещи очень быстро, и вы увидите его влияние по всей системе, как Java поддерживает пул строк и можете стажер их как просили.

2

Поскольку строки являются неизменными в Java, массив поддержка символов никогда не подвергается (не было бы никакого способа предотвратить вас от изменения его содержимого). Старые версии Java также поддерживают сжатие ASCII-строк, поэтому нет даже гарантии, что String поддерживается символами.

Вы можете сделать это с помощью массива CharBuffers. CharBuffer, как и String, даже реализует CharSequence, поэтому он будет совместим с некоторыми API (например, Pattern.matcher).