LINUX.ORG.RU
Ответ на: комментарий от melkor217

В нормальных языках строки и массивы символов - разные сущности :)

...

Топикстартеру -

static boolean   isDigit(char ch)
Determines if the specified character is a digit.

KRoN73 ★★★★★
()
Ответ на: комментарий от melkor217

>А перегрузить квадратные скобочки для строк в нормальных языках можно?

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

KRoN73 ★★★★★
()
Ответ на: комментарий от yoghurt

>Это в каких? Oo

Ну, например, в отличных от PHP ;)

...

Вот если строка представлена массивом - один элемент массива должен быть байтом или символом?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ну, например, в отличных от PHP ;)

В Смолтоке, например, вот такая иерархия

Object
  Iterable
    Collection 
      SequenceableCollection
        ArrayedCollection
          CharacterArray
            String
            UnicodeString

Вот если строка представлена массивом - один элемент массива должен быть байтом или символом?

Символом конечно =)

yoghurt ★★★★★
()
Ответ на: комментарий от melkor217

>Ну кому нужна строка из байтов?

Например, при выводе в блочное устройство :) Да и просто в файловом выводе. А то, вот, в некоторых языках люди пишут, типа, fwrite(fhandle, str, strlen(str)); и оно на юникоде пишет только часть строки...

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Когда мы выводим в блочное устройство или файл, нам уже всё равно, строка это или нет. Просто нужен побайтовый доступ и размер в байтах.

melkor217 ★★★★★
()
Ответ на: комментарий от KRoN73

Либо крутую и встроенную высокоуровневую функцию, которая примет все костыли на себя %)

melkor217 ★★★★★
()

String MyString;
//...
Character.isDigit(MyString.charAt(0));

А перегрузить квадратные скобочки для строк в нормальных языках можно?


Нет. Но есть MyString.toCharArray();

Либо крутую и встроенную высокоуровневую функцию, которая примет все костыли на себя %)


Для записывания в файл или еще куда с автоматической перекодировкой, различными блэкджеками и причитающимся есть наследники java.io.Writer.


JavaIsGoodLanguagePropagandaStream.close();

proud_anon ★★★★★
()
Ответ на: комментарий от wfrr

В чем проблема? Оно не очень быстро, да и только.

svr69 ★★
()
Ответ на: комментарий от KRoN73

Бред какой.

В нормальных языках строки это векторы литер(вот двух-(и более) мерные массивы это не строки, понятно).

В CL(CLOS):

        T
      /   \
     /     \
sequence  array
     \     /
      \   /
      vector
        |
        |
      string

Love5an
()
Ответ на: комментарий от KRoN73

> А то, вот, в некоторых языках люди пишут, типа, fwrite(fhandle, str, strlen(str)); и оно на юникоде пишет только часть строки...

это пуркуа?

ananas ★★★★★
()
Ответ на: комментарий от Reset

>Если имеется ввиду Си и utf-8, то запишется строка целиком.

fwrite в Си разве длину записи в символах требует, а не в байтах? Или strlen возвращает длину в байтах, а не символах? И первое, и второе - сбой во внутренней логике библиотеки :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

strlen возвратит длину в байтах, поэтому строка запишется целиком. подсказка: в utf-8 строка внутри не содержит нулевого байта.

Reset ★★★★★
()
Ответ на: комментарий от Reset

>strlen возвратит длину в байтах

Ну, вот. А по логике-то, должна возвращать длину в символах.

в utf-8 строка внутри не содержит нулевого байта


Да я-то это знаю :) И даже знаю, как быстро искать длину такой строки. Я пример-то не из своего кода привожу :D

KRoN73 ★★★★★
()
Ответ на: комментарий от Reset

>конечно работает, ты получишь i'й байт.

Вот оно и видно, что строки в Си - это не строки, а массивы байт. Со всеми вытекающими (для логики) последствиями :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.