- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
/*
*
*
*/
public class Chapter1 {
private String text[] = { "Returns a new string that is a ",
"substring of this string" };
private String splitted[];
private int k = 2; //
private char c = '<';
public void run() {
for (int i = 0; i < text.length; i++) {
text[i] = makeString(text[i], change(i));
System.out.println(text[i]);
}
}
/*
*
*/
private String makeString(String textLine, String[] changed) {
StringBuilder sBui = new StringBuilder(textLine);
int i = 0; // changed index
int beginIndex = 0;
for (int j = 0; j < splitted.length; j++) {
beginIndex = sBui.indexOf(splitted[j], beginIndex); // word begin
int endIndex = beginIndex + splitted[j].length(); // word end
if(splitted[j].length() > k){
sBui.delete(beginIndex, endIndex);
sBui.insert(beginIndex, changed[i++]);
}
beginIndex = endIndex;
}
return sBui.toString();
}
/*
*
*
*/
public String[] change(int i) {
splitted = text[i].split("\t|\n| ");
for (int indx = 0; indx < splitted.length; indx++) {
if (splitted[indx].length() > k) {
StringBuilder sBuild = new StringBuilder(splitted[indx]);
sBuild.setCharAt(k, c);
splitted[indx] = sBuild.toString(); // irasomas pakeistas zodis
}
}
return splitted;
}
} // end
help, задание - вкаждом слове текста к-тую буквы заменить с символом, если длина слова меньше к, замену не выполнять.
Exception in thread "main" java.lang.StringIndexOutOfBoundsExceptio n: String index out of range: -1 (проблема)
wvxvw 24.08.2013 15:31 # +4
День прожит незря.
wvxvw 24.08.2013 16:10 # +4
Ну, или еще вариант.
wvxvw 24.08.2013 16:16 # +4
bormand 24.08.2013 17:56 # +2
wvxvw 24.08.2013 19:32 # +3
голосом Дуку: Something sinister!
bormand 24.08.2013 19:36 # +1
wvxvw 24.08.2013 19:55 # +2
bormand 24.08.2013 20:05 # 0
Отличная мысль ;)
wvxvw 24.08.2013 20:09 # +3
Но напоследок.
bormand 24.08.2013 20:21 # +2
vistefan 24.08.2013 20:28 # +2
kegdan 24.08.2013 20:34 # +2
vistefan 24.08.2013 20:44 # +1
Мутабельные строки решают.
guest 24.08.2013 22:10 # 0
bormand 24.08.2013 22:14 # 0
guest 27.08.2013 10:48 # −1
bormand 27.08.2013 11:30 # 0
guest 27.08.2013 13:29 # 0
На пробел похоже.
kegdan 24.08.2013 16:11 # +1
И логика постороения методов радует - даешь одному методу строку, а он тебе выдает массив слов с замененной буквой (такое ощущение, что не доработал), а второй принимает исходную строку и массив слов из этой строки с нужными изменениями. Бред же.
spivti 24.08.2013 18:58 # −3
Другой выбирает из строки индекс слова и заменяет его изменненым словом из массива. Что неясного.
Предложите свой вариан на ЯВЕ. другим тоже это относиться.
roman-kashitsyn 24.08.2013 18:59 # +3
bormand 24.08.2013 19:12 # 0
1024-- 24.08.2013 20:33 # 0
> Хотел ответить на брейнфаке, но что-то лениво ;(
Вижу, почти допилили уже...
vistefan 24.08.2013 20:41 # 0
1024-- 24.08.2013 20:51 # +2
А вообще это был неявный зелёный цвет.
bormand 24.08.2013 21:54 # +5
(Код юзает -1 в качестве EOF, идет например в линушном bf).
1024-- 24.08.2013 23:43 # 0
bormand 24.08.2013 23:51 # +1
anonimb84a2f6fd141 02.09.2013 15:13 # 0
Губа до Москвы докатится.
bormand 02.09.2013 16:20 # +1
bormand 02.09.2013 16:30 # 0
kegdan 02.09.2013 16:53 # +1
bormand 02.09.2013 16:58 # +1
kegdan 02.09.2013 18:47 # 0
bormand 02.09.2013 18:56 # 0
kegdan 02.09.2013 18:57 # 0
eth0 02.09.2013 20:41 # 0
vistefan 24.08.2013 20:16 # 0
>> относиться
Ой, студентам ли...
neeedle 02.09.2013 14:31 # 0
kegdan 02.09.2013 14:43 # 0
neeedle 02.09.2013 14:48 # 0
roman-kashitsyn 02.09.2013 14:51 # +3
bormand 24.08.2013 19:07 # 0
> Предложите свой вариан на ЯВЕ. другим тоже это относиться.
Процитирую Мистера Хэнки: Это говнокод, а не сайт помощи немощным студентам.
ГК это развлекательный сайт, на котором мы отдыхаем от работы/учебы и читаем/пишем код just for fun. А для помощи студентам/школоте есть куча платных и бесплатных сайтов, где тебе будут рады помочь.
А вообще - иди думай сам. Лабы студентам дают не ради оценок, а ради того, чтобы они думать научились. И если ты сделаешь все сам - пользы будет на порядок больше, чем если тебе подскажут.
kegdan 24.08.2013 19:10 # 0
bormand 24.08.2013 19:13 # 0
kegdan 24.08.2013 19:19 # +4
1 Как все сделать самому
2 Я ненавижу людей
)))
spivti 24.08.2013 19:27 # −2
bormand 24.08.2013 19:29 # 0
anonimb84a2f6fd141 02.09.2013 15:12 # 0
kegdan 24.08.2013 19:12 # +1
bormand 24.08.2013 19:22 # 0
Причем аргументы этот change получает через анус, неужели так сложно было передать ему text[i], а не i, а splitted описать внутри функции? ;)
P.S. А потом в makeString один и тот же массив юзатся как changed и как splitted ;)
kegdan 24.08.2013 19:29 # 0
Ну зачем то же мы поле создавали, что бы оно без дело не стояло пусть используется в как можно большем числе функций
> splitted описать внутри функции
пусчай повесит в куче - он нам еще пригодиться)
bormand 24.08.2013 19:30 # 0
А он и пригодился в makeString.
kegdan 24.08.2013 19:37 # 0
Это полиморфизм наоборот)
bormand 24.08.2013 20:16 # 0
kegdan 24.08.2013 16:33 # −4
bormand 24.08.2013 18:02 # 0
kegdan 24.08.2013 18:05 # +1
bormand 24.08.2013 18:06 # 0
kegdan 24.08.2013 19:08 # +1
В итоге мой код оказался толстым троллингом)
spivti 24.08.2013 19:28 # −2
Мистер Хэнки 24.08.2013 18:02 # +4
kegdan 24.08.2013 18:11 # 0
Я только щас понял, что автор поста просил помощи, если бы понял раньше - не помог бы)
spivti 24.08.2013 18:58 # −3
bormand 24.08.2013 18:16 # +1
spivti 24.08.2013 18:59 # −3
kegdan 24.08.2013 19:04 # +2
bormand 24.08.2013 19:15 # +2
kegdan 24.08.2013 19:20 # 0
wvxvw 24.08.2013 22:49 # 0
Альтернативное решение на Питоне.
bormand 24.08.2013 22:56 # 0
kegdan 24.08.2013 18:57 # +3
10 inputString$ = "Returns a new string that is a substring of this string"
20 replaceChar$ = "<"
30 replaceIndex = 2
40 d = LEN(inputString$)
50 DIM s$(d)
60 index = 0
70 FOR i = 1 TO d
80 index = index + 1
90 a$ = MID$(inputString$, i, 1)
100 IF a$ = " " THEN
110 index = 0
120 END IF
130 IF index = replaceIndex THEN
140 s$ = s$ + replaceChar$
150 ELSE
160 s$ = s$ + a$
170 END IF
180 NEXT i
190 PRINT s$
Мистер Хэнки 24.08.2013 19:36 # +3
bormand 24.08.2013 19:54 # 0
http://govnokod.ru/13659#comment192760]
Мистер Хэнки 24.08.2013 20:22 # 0
bormand 24.08.2013 20:25 # +1
Мистер Хэнки 24.08.2013 21:19 # +1
kegdan 24.08.2013 19:40 # +3
spivti 24.08.2013 19:44 # −2
public class Chapter1 {
private String text[] = { "Returns a new string that is a ",
"substring of this string" };
private String splitted[];
private int k = 2;
private char c = '<';
public void run() {
for (int textLine = 0; textLine < text.length; textLine++) {
splitted = text[textLine].split("\t|\n| ");
text[textLine] = makeString(textLine);
System.out.println(text[textLine]);
}
}
private String makeString(int lineIndex) {
StringBuilder sBui = new StringBuilder(text[lineIndex]);
int splittedIndex = 0;
for (int j = 0; j < splitted.length; j++) {
int begin = sBui.indexOf(splitted[splittedIndex]);
if(splitted[splittedIndex].length() > k){
sBui.setCharAt(begin + k, c);
}
splittedIndex++;
}
return sBui.toString();
}
}
kegdan 24.08.2013 19:49 # 0
завязывай, у меня от этого брат умер)))
spivti 24.08.2013 19:52 # −1
bormand 24.08.2013 19:56 # +1
UPD: А нет, не будет работать.
bormand 24.08.2013 20:02 # 0
Самый банальный вариант, который будет работать - загрузи всю строку полностью в стрингбилдер (ты один хрен это делаешь), и тупо пробегись по нему посимвольно циклом, заменяя в нем каждую k-ю букву от начала слова на нужный символ, без всяких split и indexOf. Как определить, что текущий символ k-й от начала - подумай сам :)
kegdan 24.08.2013 19:45 # 0
\b(\w{2})\w
$1<
В любом языке. менять < и 2 опционально
spivti 24.08.2013 19:50 # −2
kegdan 24.08.2013 19:55 # 0
bormand 24.08.2013 19:53 # 0
У тебя change в строке 60 испортило массив splitted - в нем вместо "Returns" лежит "R<turns" и т.п. Когда мы зайдем в makeString, splitted и changed будут указывать на один и тот же массив (почему? читай любую книгу по яве, раздел про ссылки), а он уже испорченный. Поэтому indexOf в строке 34 не найдет этот "R<turns" в исходной строке, и вернет -1. Ну а дальше delete в строке 38 сфейлится с исключением.
spivti 24.08.2013 19:57 # 0
kegdan 24.08.2013 20:00 # +1
guest 24.08.2013 20:04 # −2
без классов и всякой фигни, но вроде пашет
bormand 24.08.2013 20:07 # 0
Ну хотя с другой стороны выводит оно все равно не так, как нужно, а студент почерпнет отсюда знания о Scanner и ArrayList.
guest 24.08.2013 20:10 # −2
bormand 24.08.2013 20:13 # 0
kegdan 24.08.2013 20:33 # +4
guest 24.08.2013 20:29 # 0
bormand 24.08.2013 20:31 # 0
> неправильно выводит
Ну как я понял задачу - надо сохранить исходное форматирование.
guest 24.08.2013 20:36 # 0
kegdan 24.08.2013 20:39 # −1
guest 24.08.2013 20:41 # +1
kegdan 24.08.2013 20:43 # −1
spivti 24.08.2013 20:53 # −2
kegdan 15.10.2013 07:57 # +1
F#
LispGovno 15.10.2013 08:40 # 0
kegdan 15.10.2013 08:52 # 0