我有一個將輸入流轉換為字串的代碼片段。然后我使用 java.util.regex.Matcher 在字串中查找內容。
以下對我有用:
StringBuilder sb = new StringBuilder();
InputStream ins; // the InputStream data
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
br.lines().forEach(sb::append);
br.close();
String data = sb.toString();
Pattern pattern = Pattern.compile(".*My_PATTERN:(.*)");
Matcher matcher = pattern.matcher(data);
if (matcher.find())
String searchedStr = matcher.group(1); // I find a match here
但是,如果我嘗試用Apache IOUtils替換 BufferedReader ,我找不到任何具有相同字串的匹配項。
InputStream ins; // the InputStream data
String data = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
Pattern pattern = Pattern.compile(".*My_PATTERN:(.*)");
Matcher matcher = pattern.matcher(data);
if (matcher.find())
String searchedStr = matcher.group(1); // I cannot find a match here
除了 UTF-8 之外,我已經嘗試過使用其他“StandardCharsets”,但都沒有奏效。
我無法理解這里有什么不同會導致 IOUtils 不匹配。有人可以在這里幫助我嗎?
編輯:
在此處附加超級字串:
<script type="text/javascript">
(function(b){var w=400,f=b.uet,m="csm-jump-start-interaction",s=1===b.ue_jsmtf,c=b.ue_jsmtf_interaction,u="ORIGIN",v="visible",e="number",n="function",d,p,g,q,x=1===b.ue_ibft;if(s){a:{try{d=b.localStorage;break a}catch(F){}d=void 0}p=d&&typeof d.setItem===n&&typeof d.getItem===n;g=function(b,c){if(p)try{if(void 0===c)return JSON.parse(d.getItem(b)||"null");d.setItem(b,JSON.stringify(c))}catch(f){}};q=function(c,e){var d=b.ue.t,g=0,k=0;if(d)for(var h in d)d.hasOwnProperty(h)&&(d[h]<c?(d[h]=c,"af"===
h&&(g=1)):"af"===h&&(k=1));b.ue.t0=c;b.ue.viz=[v];f("tc",void 0,void 0,c);f("mts",void 0,void 0,e);b.ue.count&&(b.ue.count("csm.jumpStart.afOverridden",g),b.ue.count("csm.jumpStart.afNotOverridden",k));b.ue_jsmtf_interaction=void 0};c&&typeof c.pv===e&&typeof c.ct===e?q(c.pv,c.ct):p&&(c=g(m))&&c.ds===u&&typeof c.pv===e&&typeof c.ct===e&&(q(c.pv,c.ct),g(m,null))}f&&b.P&&b.P.when&&"function"===typeof window.setTimeout&&b.P.when("mshop-interactions").execute(function(c){function d(a){s&&g(m,{pv:((a||
{}).events||{}).pageVisible,ct:(a||{}).clickTime,ds:(a||{}).dataSource});if(typeof a===l&&typeof a.clickTime===e&&typeof a.events===l&&(typeof a.events.pageVisible===e||typeof a.events.backAnimation===e)&&typeof b.ue===l&&typeof b.uex===n)if(a.dataSource!==z||typeof b.ue.markers!==l||a.navType!==k&&a.navType!==h)s&&a.dataSource===u&&typeof a.events.pageVisible===e&&p&&(c=a.events.pageVisible,a=a.clickTime,ue.isl||(q(c,a),g(m,null)));else{a.events.pageVisible=a.events.pageVisible||a.events.backAnimation;
for(var c in b.ue.markers)!b.ue.markers.hasOwnProperty(c)||c in A||f(c,void 0,void 0,a.events.pageVisible 1);f("tc",void 0,void 0,a.events.pageVisible);f("mts",void 0,void 0,a.clickTime);f(B,void 0,void 0,a.events.pageVisible C);x?(b.ue.bfini=( b.ue.bfini||1) 1,b.ue.isBFonMshop=!0,f("bft",void 0,void 0,a.events.pageVisible b.ue.bfini-1)):((c=document.ue_backdetect)&&c.ue_back&&(b.ue.bfini= c.ue_back.value 1),b.ue.isBFonMshop=!0);b.ue.t0=a.events.pageVisible;b.ue.viz=[v];b.ue.tag("cacheSourceMemory");
b.ue.tag("mshop-interaction-" a.navType.toLowerCase());c=ue_csm.csa&&ue_csm.csa("SPA");var t=ue_csm.csa&&ue_csm.csa("PageTiming");if(c&&t){var r={};a.navType===k&&(r.transitionType=D);a.navType===h&&(r.transitionType=E);r.mshopInteractionType=a.navType.toLowerCase();c("newPage",r,{keepPageAttributes:!0});t("mark","transitionStart",a.clickTime);t("mark","nativeTransitionStart",a.clickTime)}b.uex("ld",void 0,void 0,b.ue.t.ld);delete b.ue.isBFonMshop}}function y(a){a&&a.navType===k?setTimeout(function(){d(a)},
w):d(a)}var z="MEMORY",k="BACK",h="FORWARD",l="object",B="ty",C=2,A={rc:1,hob:1,hoe:1,ntd:1,rd_:1,_rd:1},D="back-memory-cache",E="tab-switch";typeof c===l&&typeof c.addListener===n&&c.addListener(y)})})(ue_csm);
</script>
<script type="text/javascript">
ue.exec(function(d,c){function g(e,c){e&&ue.tag(e c);return!!e}function n(){for(var e=RegExp("^https://(.*\\.(images|ssl-images|media)-\\.com|" c.location.hostname ")/images/","i"),d={},h=0,k=c.performance.getEntriesByType("resource"),l=!1,b,a,m,f=0;f<k.length;f )if(a=k[f],0<a.transferSize&&a.transferSize>=a.encodedBodySize&&(b=e.exec(String(a.name)))&&3===b.length){a:{b=a.serverTiming||[];for(a=0;a<b.length;a )if("provider"===b[a].name){b=b[a].description;break a}b=void 0}b&&(l||(l=g(b,"_cdn_fr")),
a=d[b]=(d[b]||0) 1,a>h&&(m=b,h=a))}g(m,"_cdn_mp")}d.ue&&"function"===typeof d.ue.tag&&c.performance&&c.location&&n()},"cdnTagging")(ue_csm,window);
</script>
</body>
</html>
<script type="a-state" data-a-state="{"key":"dp_injected_meta_assets"}">{"assetNames":["DetailPageMetaAssetFixed","UICalendar","DetailPageEverywhereMetaAsset","DetailPageStorePickupAssets","GiftingDetailPageBuzzAssets","DetailPageMobileWebCriticalFeatureAsset","DetailPageMobileWebDefaultMetaAsset_asset_segregation","DetailPageMobileWebDefaultStableAsset","DetailPageMobileWebNonSoftlinesMetaAsset","DetailPageMobileWebDefaultOnlyAsset","DetailPageAllOffersDisplayAssets","GoldboxUDPAssets","GestaltDetailPageMobileWebMetaAsset","DetailPageMediaMatrixFullBottomSheetAssets","InstallmentPaymentDetailPageMetaAsset","MonthlyPaymentsDetailPageAssets","DetailPagePurchaseReminderAssets","DetailPagePostPurchaseAssets","DetailPageStorePickupAssets","DetailPageCustomerReviewsAttributeAssets","DetailPageHITTrustWidgetAssets"]}</script>
<!-- whfh-t6mQqNGYqyfeK wsrc4769QeAt753cAYsplN98HI3PUTtB MVfNAq1ZpiekhYwhX rid-M6W529WKJW4TD4R1Q951 -->
My_PATTERN:1000
uj5u.com熱心網友回復:
第一個代碼洗掉了線剎車,第二個沒有。
所以你應該定義多行模式匹配:
- 在模式中(從標志 s=dotall, m=multiline 開始)
Pattern pattern = Pattern.compile("(?sm).*My_PATTERN:(.*)");
- 在模式 v2
Pattern pattern = Pattern.compile("[\\s\\S]*My_PATTERN:([\\s\\S]*)");
- 帶旗幟
Pattern pattern = Pattern.compile(".*My_PATTERN:(.*)", MULTILINE|DOTALL);
所有匹配組值中的線閘。
或洗掉換行符,即:
data = data.replaceAll("\\r?\\n", "");
請參閱: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#compile(java.lang.String, int)
https://docs.oracle.com/javase/tutorial/essential/regex/pattern.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/530448.html
標籤:爪哇匹配器ioutils
