问题描述
System.out.printf("%3$d-%3d-%2$d-%<4d-%5d %n",123,456,789);
我对这段代码的预测是
789-123-456- 456- 789
但实际结果是
789-123-456- 456- 456
为什么 %5d
需要 456
?
解决方法
因为您使用了标志 $user = User::create([
'username' => $request->username,'phonenumber' => $request->phonenumber,'device_serial_number' => $request->device_serial_number,'password' => bcrypt($request->password),'user_secret_key' => Str::random(60);
]);
if($user){
$token = $user->user_secret_key;
return response()->json(['token' => $token],200);
} else{
return response('error');
}
,它重用了先前的参数索引,即 2,因此数字 465。
有关详细信息,请参阅 java.util.Formatter 文档。
参数索引 参数索引是一个十进制整数,表示参数在参数列表中的位置。第一个参数由“1$”引用,第二个参数由“2$”引用,依此类推
另一种按位置引用参数的方法是使用 '
<
,
来自 Formatter
JavaDoc,“参数索引”部分:
格式说明符可以通过三种方式引用参数:
- 显式索引在格式说明符包含参数索引时使用。
- 相对索引在格式说明符包含“
- 普通索引在格式说明符既不包含参数索引也不包含“
您的格式字符串“%3$d-%3d-%2$d-%
-
%3$d
使用显式索引来引用第三个参数 (789) -
%3d
使用普通索引来引用第一个参数 (123) -
%2$d
使用显式索引来引用第二个参数 (456) -
%<4d
使用相对索引再次引用第二个参数 -
%5d
使用普通索引来引用第二个参数 (456)
关于为什么 %5d
引用第二个参数的问题可以这样回答:它引用第二个参数,因为它是使用普通索引的第二个格式说明符。