UnknownFormatConversionException:转换 =“”
UnknownFormatConversionException: Conversion = ' '
首先,感谢您花时间解决这个问题。我根据自己的知识尝试过,但找不到修改的地方。我做了一个游戏,最后,我必须 return 格式化字符串到终端。
当我将基本字符串连接更改为格式化字符串时出现异常。我不知道如何解决它。
players
是播放器数组。
WinRatio
是 score
(int) 除以 gamePlayed
(int),四舍五入为整数。
这是我的部分代码。
public static void searchAndPrintRankingDataDesc() {
NimPlayer [] players = NimPlayer.getPlayer();
Arrays.sort(players, Comparator.comparing((NimPlayer::getWinRatio)).reversed().thenComparing(NimPlayer::getUserName));
Arrays.stream(players).forEach(System.out::println);
还有我的 toString 方法:
public String getWinRatio() {
return Integer.toString(Math.round(Float.valueOf(getScore())/ (getGamePlayed())*100));
}
public String toString() {
return String.format( "%02d" +"% | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
}
在格式化字符串中使用 %
时,必须使用另一个 %
进行转义。并且在格式化整数值时,如果已经有 toString 方法,它将得到 IllegalFormatConversionException
。
此处的代码将整数格式化为字符串。
public String getWinRatio() {
return Integer.toString(Math.round(Float.valueOf(getScore())/ (getGamePlayed())*100));
}
下面的代码再次格式化,导致IllegalFormatConversionException
。
public String toString() {
return String.format( "%02d" +"% | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
}
所以,答案将是:
public int getWinRatio() {
return Math.round(Float.valueOf(getScore())/ (getGamePlayed())*100);
}
public String toString() {
return String.format( "%02d" +"%%" + " | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
}
% 是 String.format 的特殊字符,要转义 %,您必须将其替换为 %%。所以你的陈述变成了-
String.format( "%02d" +"%% | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
首先,感谢您花时间解决这个问题。我根据自己的知识尝试过,但找不到修改的地方。我做了一个游戏,最后,我必须 return 格式化字符串到终端。
当我将基本字符串连接更改为格式化字符串时出现异常。我不知道如何解决它。
players
是播放器数组。WinRatio
是score
(int) 除以gamePlayed
(int),四舍五入为整数。
这是我的部分代码。
public static void searchAndPrintRankingDataDesc() {
NimPlayer [] players = NimPlayer.getPlayer();
Arrays.sort(players, Comparator.comparing((NimPlayer::getWinRatio)).reversed().thenComparing(NimPlayer::getUserName));
Arrays.stream(players).forEach(System.out::println);
还有我的 toString 方法:
public String getWinRatio() {
return Integer.toString(Math.round(Float.valueOf(getScore())/ (getGamePlayed())*100));
}
public String toString() {
return String.format( "%02d" +"% | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
}
在格式化字符串中使用 %
时,必须使用另一个 %
进行转义。并且在格式化整数值时,如果已经有 toString 方法,它将得到 IllegalFormatConversionException
。
此处的代码将整数格式化为字符串。
public String getWinRatio() {
return Integer.toString(Math.round(Float.valueOf(getScore())/ (getGamePlayed())*100));
}
下面的代码再次格式化,导致IllegalFormatConversionException
。
public String toString() {
return String.format( "%02d" +"% | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
}
所以,答案将是:
public int getWinRatio() {
return Math.round(Float.valueOf(getScore())/ (getGamePlayed())*100);
}
public String toString() {
return String.format( "%02d" +"%%" + " | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);
}
% 是 String.format 的特殊字符,要转义 %,您必须将其替换为 %%。所以你的陈述变成了-
String.format( "%02d" +"%% | "+ "%02d" +" games | "+ "%s " + "%s", getWinRatio(), gamePlayed, givenName, familyName);