한참을 살펴봐도 아직 실감이 나지 않습니다. 이때 저는 당황하기 시작했습니다. 재빨리 제출 기록을 보고 코드가 내가 작성한 것이 아니라는 것을 확인했기 때문에 다른 사람들이 물어보면 내가 작성한 것이 아니라고 말하기 쉬울 것 같았습니다. 비록 코드를 작성하지는 않았지만 여전히 문제를 살펴봐야 합니다. 결국 돈을 받은 후에는 일을 해야 한다.
다음 단계는 코드를 분석하는 것입니다. 먼저, 명령어 쿼리의 응답 로직을 파싱하는 오류 가능성이 가장 높은 것을 분석했습니다. 이곳의 코드를 수동으로 명령을 실행하여 얻은 결과와 함께 분석해 본 결과, 이 응답 결과를 바탕으로 정상적으로 응답 결과를 얻을 수 있음을 발견했습니다. 한참을 살펴보니 문제가 없더라구요. 그러다가 명령어 스플라이싱 코드를 보니 스플라이싱 로직이 딱 한줄이라 문제는 없을 것 같습니다. 어쩔 수 없이 다시 로그를 살펴보니, 이번에는 로그에 인쇄, 전송, 실행 명령이 있다는 것을 알게 되었습니다. 자세히 살펴보면 왜 쉼표가 따로 있는 걸까요? 그는 자신이 올바르게 보는지 확인하기 위해 다시 안경을 문질렀습니다.
이번에는 다시 코드를 살펴보겠습니다. MessageFormat
에 문제가 있지만 현재로서는 아무런 증거도 찾을 수 없습니다. MessageFormat
都有点问题,但是一时又找不到啥证据。
public Integer getMaxIndex() { // 返回最大的索引值 1035 } public String queyBySsh() { // 这里期望拼接的命令是 show index 1035,但是实际的命令却是 show index 1,035 // 最终得到的命令多了个英文的逗号 String command = MessageFormat("show index {0}", getMaxIndex()); // 通过SSH执行这个命令查询 }
后来突然想起来之前看到过的一个Wiki,好像有关于描述 MessageFormat
的注意事项。赶紧去找来看一下,果然里面有写到当 MessageFormat
的参数是数字类型时,当数字超过 3 位数字以上时,每隔 3 位会多增加一个因为的逗号。所以根据上面的代码逻辑得到的就是 show index 1,035
了,结果中多了个英文的逗号,而将这个拼接出来的命令手动执行是查不出来数据的。终于破案了,撒花,撒花,撒花!!!
第一种方法是将数字转为字符串,然后再进行格式化,将上面的代码修改为如下:
public String queyBySsh() { // 这里拼接的时候先调用一下 String.valueOf() 方法 String command = MessageFormat("show index {0}", String.valueOf(getMaxIndex())); }
第二种方法是增加 MessageFormat
的 FormatStyle
public String queyBySsh() { // 这里的 # 就是定义的 FamatStyle String command = MessageFormat("show index {0, number, #}", getMaxIndex()); }
MessageFormat
을 설명하는 메모가 있는 것 같았습니다. 재빨리 확인해 보니 과연 MessageFormat
의 매개변수가 숫자형일 때 그 숫자가 3자리를 초과하면 3자리마다 쉼표가 추가된다고 적혀 있었습니다. 숫자. 따라서 위의 코드 로직에 따르면 우리가 얻는 것은 show index 1,035
입니다. 결과에 추가 영어 쉼표가 있으며 이 스플라이스 명령을 수동으로 실행하여 데이터를 찾을 수 없습니다. 드디어 사건이 해결됐다 꽃을 펴라 꽃을 펴라! ! ! 해결 방법🎜🎜첫 번째 방법은 숫자를 문자열로 변환한 후 형식을 지정하는 것입니다. 🎜rrreee🎜두 번째 방법은 MessageFormat
를 추가하는 것입니다. FormatStyle
, 🎜위 코드를 다음과 같이 수정하세요: 🎜🎜rrreee위 내용은 Java에서 MessageFormat을 사용할 때 주의해야 할 문제는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!