2016-08-24 121 views
0

这段代码是一系列任务,首先是它将句子中的所有'F'替换为'f'而不使用.replace()方法。我做了什么,之后我应该把所有'f'换成空白,我完成了这些,但由于某种原因,我所有的资本'F都变成了一个奇怪的方块。有任何想法吗?我知道这是基本的代码,但婴儿的步骤。char替换(不使用替换)

这里是我的奇怪输出:“有一个名叫[] isher的isherman,他在某个事件中被清除或者有一些ish;直到一个咧嘴笑起来,把这个isherman拉进来。是她。”

谢谢!抢。

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

我对实际输出道歉的是:“有一个名叫[] isher的isherman,他在某个事件中流露出了某种东西;直到一个笑容把他们拉进去。现在他们正在抨击事件或[]是她。” – Napstur

+0

相应地编辑你的问题,你可以这样做;此外,Java版本是什么? – fge

+0

不清楚你为什么需要'positionArray'。只需在'char []'中直接替换字符即可。 –

回答

1

下面是使用Java 8.它使用一个事实,即一个StringCharSequence,以及是否可以得到的或者在它的字符或码点的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和eclipse中运行良好。前段时间我有类似的问题。对我来说,问题在于我安装的字体出现错误。只是一些Win更新已经结束了一些事情,不知道为什么。我手动重新安装我的标准字体后,一切正常。此外,这个问题也是在“空间”内。当我在调试视图中检查十六进制值时,该值稍微偏离,因此显示了不同的字符。

0

检查您的代码缩进。 你的想法是正确的,虽然没有优化。

你已经实现了3个循环,但最后一个循环是内循环。 我想你想实现3'独立'循环,检查括号内的位置。