Строковый терминатор в Java - PullRequest
0 голосов
/ 16 января 2012

Я опытный программист на C ++, но новичок в Java.

У меня есть алгоритм, который выполняет некоторые операции со строками, и я хочу завершить строку посередине.

Скажите, я хочучтобы сделать что-то вроде этого

String str("hello, world");
char[] str2 = str.toCharArray(); 
//pass str2 to some function 
myFunc(str2);
...
//inside myFunc, I decide to terminate str2 at position 3, so I did
//str2[3] = 0

//then it returns, how can I construct an String type variable from str2 that includes chars before the '\0'?
//String str3 = new String(str2), doesn't work

Я могу написать свой собственный C-like strlen.Однако я хотел бы знать, каков элегантный способ сделать это на Java.

Также трудно найти документ о типе char[].Всякий раз, когда я Google, я могу найти документ только на "char" вместо "char []".Я думаю, что у char [] могут быть методы, подобные substr или strlen.

Спасибо за любые предложения!

Ответы [ 4 ]

3 голосов
/ 16 января 2012

В Java char[] и String совершенно разные. Забудьте об ассоциации с C. Насколько вам известно, они никак не связаны. (Для полноты, что String объекты содержат final char[], представляющий строку (а это не с нулевым символом в конце), которую вы можете получить, как и в своем примере. Не делайте этого, пока вы Разница ясна.) Вы вызываете все свои методы в строке. Но помните, что в Java String являются неизменяемыми - если у вас есть строка, она будет всегда одинаковой. Вы можете назначить новый объект String переменной, но старая строка не изменится (пока все ссылки не исчезнут и, конечно, не получит GC'd). Это важно помнить, когда вы пытаетесь получить новую строку, как это. Как только вы выяснили, как долго вы хотите использовать вашу строку, используйте .substring().

Итак, ваш пример должен выглядеть примерно так:

// Remember in Java no object is statically allocated.
String str1 = "Hello, World";
int indexToCutAt = myFunc(str1);
// We can't change str1, so we'll need to store the new string.
String str2 = str1.substring(0,indexToCutAt);
3 голосов
/ 16 января 2012

Поправьте меня, если я ошибаюсь, но похоже, что вы просто пытаетесь получить первые три символа String. Для этого вы можете просто сделать:

str.substring(0, 3);

char[] не является собственным классом. Все массивы имеют длину, которую вы можете получить следующим образом:

char[] myChars = new Char[5];
return myChars.length; // returns 5

Однако вы должны обрабатывать вещи как String объекты, как правило, а не char[]. String расширяет CharSequence, что (как следует из названия) является просто последовательностью char примитивов, по существу, является char[].

tl; др: Просто используйте String методы

2 голосов
/ 16 января 2012

Взгляните на подстроку (int beginIndex) и подстроку (int beginIndex, int endIndex) , это поможет:)

Таким образом, в вашей функции myFunc(str2); возвращает позицию, которую вы хотите разорвать, скажем pos,

так что вы хотите написать что-то вроде

int pos = myFunc(str2);
String str3 = str2.substring(0,pos);
2 голосов
/ 16 января 2012

Использовать java подстрока метод String # substring ()

str3 = str.substring(0, 3);
...