Java 无效方法赢得';不要操纵字符串

Java 无效方法赢得';不要操纵字符串,java,Java,我有一个void方法,它应该接受一个字符串,并根据分隔符将其拆分为两个字符串。使用调试器后,该方法似乎工作正常,但我为该方法传递的用于存储结果的两个空字符串似乎没有得到更新。我一定是在做些傻事,但我很感激你的帮助 public static void main(String[] args) { String dictFile = "/Users/simonrhillary/Desktop/Dictionary(3).txt"; String synFile = "/Users/s

我有一个void方法,它应该接受一个字符串,并根据分隔符将其拆分为两个字符串。使用调试器后,该方法似乎工作正常,但我为该方法传递的用于存储结果的两个空字符串似乎没有得到更新。我一定是在做些傻事,但我很感激你的帮助

public static void main(String[] args) {
    String dictFile = "/Users/simonrhillary/Desktop/Dictionary(3).txt";
    String synFile = "/Users/simonrhillary/Desktop/Synonyms(2).txt";
    fileReader dictFR = new fileReader();
    fileReader synFR = new fileReader();
    dictFR.filePath = dictFile;
    synFR.filePath = synFile;
    dictFR.openFile(dictFile);
    synFR.openFile(synFile);
    String[] dictionary = dictFR.fileToArray();
    String[] synonyms = synFR.fileToArray();
    String regx = "^[aflmptu]+$";
    String regexTemplate = "^[]+$";
    String word1 = "";
    String word2 = "";
    synToWords(synFR.getLine(3), word1, word2);//error seems to be here. 
                                                       //word1 and word 2 stay ""
    System.out.println(word1 +" " + word2);
    printArray(findCombos(dictionary, word1, word2));

}

public static void synToWords(String syn, String wordI, String wordII){
    String[] words = syn.split("\\t");
    wordI = wordI + words[0];
    wordII = wordII + words[1];
}
我还没有发布其他方法,但它们都很好。问题在于synToWords方法。非常感谢

Java。所以这一行:

wordI = wordI + words[0];
wordI
指定一个新字符串,但只有引用的本地(在方法中)副本发生了更改。原始
word1
变量仍然引用原始字符串

要使其正常工作,可以使用数组:

public static void synToWords(String syn, String[] word1And2){
    String[] words = syn.split("\\t");
    word1And2[0] = word1And2[0] + words[0];
    word1And2[1] = word1And2[1] + words[1];
}
在主代码中:

String[] words = { "", "" };
synToWords(synFR.getLine(3), words);
System.out.println(words[0] +" " + words[1]);
或者,您可以简单地返回字符串数组:

public static String[] synToWords(String syn){
    String[] words = syn.split("\\t");
    return new String[] {words[0], words[1]};
}

String[] words = synToWords(synFR.getLine(3));
System.out.println(words[0] +" " + words[1]);

Java完全是按值调用的。wordI和wordII是两个引用表达式值的副本。引用表达式为null或指向对象的指针。当您在synToWords中指定例如wordI时,您仅更改synToWords的本地副本指向的内容


一种解决方案是让该方法返回一个包含两个片段的字符串[]。然后调用方可以将结果的元素分配给它的变量。

好的,我想可能是这样的,我应该更改返回类型并运行该方法两次吗?最好不要将该方法拆分出来,或者最好使用
Scanner