优化这段代码private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL)
时间: 2024-02-03 10:12:07 浏览: 69
这段代码的主要作用是匹配HTML标签中非引号包裹的属性,其正则表达式为`([a-z0-9]+)(=)([^\"\\s']+)`。
为了优化这段代码,可以考虑以下几个方面:
1. 编译正则表达式对象一次后重复使用:将Pattern对象定义成静态变量,避免每次调用时都重新编译一次正则表达式。
2. 使用预编译的字符类:将`[a-z0-9]`替换成`\w`,表示匹配所有字母和数字字符。
3. 使用引号限定符:将`[^\"\\s']+`替换成`\"([^\"]*)\"|'([^']*)'`,表示匹配双引号或单引号包裹的属性值。
优化后的代码如下所示:
```
private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("\\w+=(\"([^\"]*)\"|'([^']*)')", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
```
相关问题
private final CharSequence getSmallTime() { Context context = getContext(); boolean is24 = DateFormat.is24HourFormat(context); LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale); final char MAGIC1 = '\uEF00'; final char MAGIC2 = '\uEF01'; SimpleDateFormat sdf; String format = is24 ? d.timeFormat24 : d.timeFormat12; // Add seconds to the format string format += ":ss"; if (!format.equals(mClockFormatString)) { /* * Search for an unquoted "a" in the format string, so we can * add dummy characters around it to let us find it again after * formatting and change its size. */ if (AM_PM_STYLE != AM_PM_STYLE_NORMAL) { int a = -1; boolean quoted = false; for (int i = 0; i < format.length(); i++) { char c = format.charAt(i); if (c == ''') { quoted = !quoted; } if (!quoted && c == 'a') { a = i; break; } } if (a >= 0) { // Move a back so any whitespace before AM/PM is also in the alternate size. final int b = a; while (a > 0 && Character.isWhitespace(format.charAt(a-1))) { a--; } format = format.substring(0, a) + MAGIC1 + format.substring(a, b) + "a" + MAGIC2 + format.substring(b + 1); } } mClockFormat = sdf = new SimpleDateFormat(format); mClockFormatString = format; } else { sdf = mClockFormat; } String result = sdf.format(mCalendar.getTime()); if (AM_PM_STYLE != AM_PM_STYLE_NORMAL) { int magic1 = result.indexOf(MAGIC1); int magic2 = result.indexOf(MAGIC2); if (magic1 >= 0 && magic2 > magic1) { SpannableStringBuilder formatted = new SpannableStringBuilder(result); if (AM_PM_STYLE == AM_PM_STYLE_GONE) { formatted.delete(magic1, magic2+1); } else { if (AM_PM_STYLE == AM_PM_STYLE_SMALL) { CharacterStyle style = new RelativeSizeSpan(0.7f); formatted.setSpan(style, magic1, magic2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } formatted.delete(magic2, magic2 + 1); formatted.delete(magic1, magic1 + 1); } return formatted; } } return result;}如何实时更新秒 protected void updateClock() { if (mDateFormat == null) { final String dateFormat = getContext().getString(R.string.system_ui_date_pattern); final Locale l = Locale.getDefault(); final String fmt = ICU.getBestDateTimePattern(dateFormat, l.toString()); mDateFormat = new SimpleDateFormat(fmt, l); } mCurrentTime.setTime(System.currentTimeMillis()); final String text = mDateFormat.format(mCurrentTime); if (!text.equals(mLastText)) { setText(text); mLastText = text; }
这段代码是一个 Android 应用中的时间显示控件的实现,其中 getSmallTime() 方法用于获取当前时间并格式化成一个小的时间字符串,包括小时、分钟和秒。在这个方法中,首先获取当前的时间格式,然后通过 SimpleDateFormat 进行格式化。在格式化过程中,如果时间格式中包含了 AM/PM,那么会在其前后添加特殊字符,以便在后续的处理中对其进行调整,并且将秒添加到时间格式中。最后返回格式化后的时间字符串,或者是一个 SpannableStringBuilder 对象,用于支持不同大小的 AM/PM 文字。而 updateClock() 方法则用于更新显示控件中的时间,并根据时间是否发生变化来更新显示内容。如果时间有更新,则将最新的时间字符串设置为控件的文本。
AC_CONFIG_SUBDIRS([libhtp]) HTP_DIR="libhtp" AC_SUBST(HTP_DIR) HTP_LDADD="../libhtp/htp/libhtp.la" AC_SUBST(HTP_LDADD) # make sure libhtp is added to the includes CPPFLAGS="-I${srcdir}/../libhtp/ ${CPPFLAGS}" AC_CHECK_HEADER(iconv.h,,[AC_MSG_ERROR(iconv.h not found ...)]) AC_CHECK_LIB(iconv, libiconv_close) AC_DEFINE_UNQUOTED([HAVE_HTP_URI_NORMALIZE_HOOK],[1],[Assuming htp_config_register_request_uri_normalize function in bundled libhtp])
这段代码主要是用于检查和配置libhtp库的相关信息。
AC_CONFIG_SUBDIRS([libhtp])表示将libhtp作为子目录进行配置。
HTP_DIR="libhtp"和AC_SUBST(HTP_DIR)用于将libhtp的路径保存在变量HTP_DIR中,并将变量HTP_DIR导出为Makefile中的变量。
HTP_LDADD="../libhtp/htp/libhtp.la"用于在链接时加入libhtp库。
CPPFLAGS="-I${srcdir}/../libhtp/ ${CPPFLAGS}"表示将libhtp的路径加入到预处理器选项中。
AC_CHECK_HEADER(iconv.h,,[AC_MSG_ERROR(iconv.h not found ...)])用于检查是否存在iconv.h头文件,如果不存在,则输出错误信息。
AC_CHECK_LIB(iconv, libiconv_close)用于检查是否存在libiconv库,如果不存在,则不进行任何操作。
AC_DEFINE_UNQUOTED([HAVE_HTP_URI_NORMALIZE_HOOK],[1],[Assuming htp_config_register_request_uri_normalize function in bundled libhtp])用于判断是否存在函数htp_config_register_request_uri_normalize,如果存在,则将宏HAVE_HTP_URI_NORMALIZE_HOOK定义为1,否则定义为0。这个宏的定义同样使用了AC_DEFINE_UNQUOTED宏。
阅读全文