PT10HMSのように無効な期間でxmlを取得します(MとSの前に番号がないことに注意してください)。私はこれをファイルを読み込み、継続文字列を文字単位で繰り返し、並んでいる2文字の間に0を挿入することで修正しました(PとTの間を除く)。私はもっと洗練されたソリューションがsedなどの正規表現を使用していたのかどうか疑問に思っていましたか?任意の提案java - 無効な期間を修正してください
答えて
ここJavaソリューションのためのアイデアのための
おかげで(確かsed
も使用することができます)。
String dur = incorrectDuration.replaceAll("(?<!\\d+)[HMS]", "");
は、今私は
PT10H
を得る:
String incorrectDuration = "PT10HMS";
String dur = incorrectDuration.replaceAll("(?<!\\d+)[HMS]", "0$0");
これは
PT10H0M0S
は個人的に、私は彼らの前に数字を持っていない文字を削除好む生成します
両方の場合においてDuration.parse(dur)
が動作し、期待される結果が得られます。
(?<!\\d+)
は負のlookbehindです:この正規表現は、H、M、またはSの前に文字列がない場合にのみ一致します。
編集:私はおそらくそれを次のように過ごしています。あなたがコメントで言及したように、例えばPTHMS
を持っている場合にも、私が好きな文字列をどのように作り出すことができるのか不思議に思っていました。プロダクションコードの場合は、上記の単純な解決策を採用することをお勧めします。
String durationString = "PTHMS";
// if no digits, insert 0 before last letter
if (! durationString.matches(".*\\d.*")) {
durationString = durationString.replaceFirst("(?=[HMS]$)", "0");
}
// then delete letters that do not have a digit before them
durationString = durationString.replaceAll("(?<!\\d)[HMS]", "");
これは
PT0S
(?=[HMS]$)
が先読みで生産します。この空の文字列の後にH、M、Sが続き、文字列の終わりが続く場合に限り、空の文字列に一致します。この空の文字列を0
に置き換えると、PTHM0S
となります。文字列に少なくとも1桁の数字があることを確認したら、その前に桁のない文字を削除することができます。
ちょうどPT
だったのであれば、まだ動作しません。私が理解するように、これは起こらない。その場合は、代わりにif
ステートメント内でdurationString = PT0S;
を使用することをお勧めします。
数字のない文字を取り除くのが好きでしたが、値PTHMSのため無効だったPTを残してしまったので動作しませんでした。私はこれをテストし、それを置き換えることができると思うが、0を挿入するための正規表現は完全に働いたので、私はそれを使用していますありがとう!!ある日、私は正規表現について読んでいく必要があります。 – kevin
良い点!私はこの可能性について考えていたと思うが、答えにそれについて書くのを忘れてしまった。 @kevin –
- 1. エラー:SalesForceの無効な項目を修正してください
- 2. 単純なJavaコードでエラーを修正してください
- 3. Arraylist Java、Scopeの問題を修正してください
- 4. 修正このしてください
- 5. クッキー管理を修正してください
- 6. Rails:無効なデータにフォームを記入してください
- 7. リストを修正してください。振る舞い
- 8. "Todo app"を修正しようとしてください
- 9. 無効なasp.net URLを入力しないでください
- 10. 無効なキー例外を助けてください
- 11. 非同期マージコミット(git)を修正する方法を教えてください。
- 12. gitを修正し、マスターにないコミットをマージしてください。
- 13. 再試行してください:エラー(無効なJSONマッピング)JSON
- 14. Pythonでマルチスレッドコードを修正してください
- 15. スフィンクスTOCツリーを修正してください
- 16. css.mapファイルのMIMEタイプを修正してください
- 17. 私のXMLファイルをPHPフォームで修正してください。
- 18. Html:テキストフィールドの空白を修正してください
- 19. Github Rebase workを修正してください
- 20. gitコミットハッシュを手動で修正してください
- 21. 私のjqueryトグルを修正してください
- 22. イテレータ "constness"を確認/修正してください
- 23. scale_fill_gradientの引数を修正してください
- 24. git rebaseを修正してください
- 25. ReSharper:解決策全体を修正してください
- 26. RMarkdownドキュメントのggplotパネルの幅を修正してください
- 27. google chart:Uncaught(約束事)を修正してください。エラー:
- 28. Oracleのユニーク制約を修正してください
- 29. gwt-ui:binder:私のコードを修正してください。
- 30. jQuery UIオートコンプリートのファイルを修正してください。
文字の前に数字がない文字を削除するのは正しいでしょうか(PとTを除いて)?それは実際には何の違いもありません。 –