2016-08-24 3 views
0

Этот код представляет собой серию задач, во-первых, он заменяет все «F» в строке предложения на «f» без использования метода .replace(). Что я сделал, то после этого я должен заменить все «f» на пробелы, которые я вроде сделал, но почему-то все мои капиталы «F» переменились на странный квадрат. Есть идеи? Я знаю, что это базовый код, но детские шаги.Замена Char (без замены)

Вот мой странный результат: «Был ишерист по имени [], который был или есть какой-то ич в искусе, до тех пор, пока он не усмехнулся, не втянул в себя ишериста. Теперь они иссушают вопрос или [] ее."

Спасибо! Роб.

public static void main(String[] args) { 
    // orginal string sentence 
    String sentence = ("There was a fisherman named Fisher who fished for some fish in a fissure; till a fish with a grin, pulled the fisherman in. Now they’re fishing the fissure for Fisher. "); 
    // data 
    char[] originalArray = sentence.toCharArray(); 
    int i = 0; 
    int sLength = sentence.length(); 
    int positionArray[]; 
    // combining an int to the array position 
    positionArray = new int[sLength]; 
    /* while loop to check the position of any 'F' or 'f' characters in sentence and identifying it's array position*/ 
    while (i < sLength) { 
     char charAt = sentence.charAt(i); 
     if (charAt == 'F') { 
      originalArray[i] = 0; 
      positionArray[i] = 1; 
     } 
     i++; 

    } 
    //redeclaring int i to 0 for the new array 
    i = 0; 
    //reassigning the character 'F' or 'f' to just 'f to 'sentence' 
    sentence = new String(originalArray); 
    char[] newArray = sentence.toCharArray(); 
    while (i < sLength) { 
     if (positionArray[i] == 1) { 
      newArray[i] = 'f'; 
     } 
     i++; 
    //redeclaring int i to 0 for the (part e) 
    i = 0; 
    //removing every occurance of 'f' (part e) 
    while (i < sLength) { 
     if (newArray[i] == 'f' ) { 
      newArray[i] = ' '; 
     } 
     i++; 
    //printing to console 
    } 
    sentence = new String(newArray); 
    System.out.println(sentence); 
} 

}

+0

Я извиняюсь за реальный результат: «Был ишерист по имени [], который сделал или что-то в исходе, до тех пор, пока иш с усмешкой не вытащил ишериста. Теперь они иссушают вопрос или [] ее." – Napstur

+0

Правильно отредактируйте свой вопрос, вы можете это сделать; также, что такое версия Java? – fge

+0

Непонятно, зачем вам 'positionArray'. Просто замените символы непосредственно в 'char []'. –

ответ

1

Вот решение с использованием Java 8. Он использует тот факт, что String является CharSequence, и что вы можете получить IntStream либо символов или кодовых точек в нем; Это решение использует chars:

// Turn all 'F's into 'f's 
private int bigFToSmallF(final int inputChar) 
{ 
    return 'F' == inputChar ? 'f' : inputChar; 
} 

// Turn all 'f's into '0's 
private int smallFToZero(final int inputChar) 
{ 
    return 'f' == inputChar ? '0' : inputChar; 
} 

private String anyFToZeroes(final String input) 
{ 
    final StringBuilder sb = new StringBuilder(input.length()); 

    input.chars().map(this::bigFToSmallF).map(this::smallFToZero) 
     .forEach(sb::appendCodePoint); 

    return sb.toString(); 
} 

Подключите этот код в main и вы сделали.

+0

Удивительно, я изучу это полностью, я серьезно не могу вас поблагодарить! – Napstur

0

У меня нет ошибок. Прекрасно работает в win cmd и в затмении. Некоторое время назад у меня была аналогичная проблема. Для меня проблема в том, что в моих установленных шрифтах была ошибка. Просто какое-то обновление Win кое-что принесло, не знаю почему. После того, как я вручную переустановил мои std-шрифты, все работало нормально. Кроме того, проблема также была в «пространстве». Когда я проверил шестнадцатеричное значение в отладочном представлении, значение было слегка отключено, поэтому отобразился другой символ.

0

Проверьте свой код в отпечатке. Ваша идея правильная, хотя и не оптимизирована.

Вы реализовали 3 петли, но последнее - это внутренний цикл. Я думаю, вы хотели реализовать 3 'независимых' цикла, проверьте размещение скобок.

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