我试图在用户输入中匹配粗鲁的单词,例如"我讨厌你!" 或者"i.håté.Yoù"将与从JSON解析的单词数组中的"恨你"相匹配.
所以我需要它是case和diacritic不敏感的,并将粗鲁的单词中的空格视为任何非字母字符:正则表达式元字符\P{L}应该适用于此,或者至少\W
现在我知道[cd]合作NSPredicate,像这样:
func matches(text: String) -> [String]? {
if let rudeWords = JSON?["words"] as? [String]{
return rudeWords.filter {
let pattern = $0.stringByReplacingOccurrencesOfString(" ", withString: "\\P{L}", options: .CaseInsensitiveSearch)
return NSPredicate(format: "SELF MATCHES[cd] %@", pattern).evaluateWithObject(text)
}
} else {
log.debug("error fetching rude words")
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
这不适用于任何元字符,我猜他们没有被解析NSpredicate,所以我尝试使用NSRegularExpression这样:
func matches(text: String) -> [String]? {
if let rudeWords = JSON?["words"] as? [String]{
return rudeWords.filter {
do {
let pattern = …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现WebChromeClient的子类,以便在youtube上嵌入视频链接(例如:https://www.youtube.com/embed/dQw4w9WgXcQ)中的全屏按钮.
我基本上简化了这个回购,这里有一些片段:
VideoWebChromeClient:
public class VideoWebChromeClient extends WebChromeClient {
private boolean isVideoFullscreen = false;
private View activityNonVideoView;
private ViewGroup activityVideoView;
private View videoViewContainer;
private CustomViewCallback videoCallback;
private Window videoWindow;
public VideoWebChromeClient(View activityNonVideoView, ViewGroup activityVideoView, Window window) {
this.activityNonVideoView = activityNonVideoView;
this.activityVideoView = activityVideoView;
this.videoWindow = window;
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
Log.w("ENTER FULLSCREEN");
videoCallback = callback;
videoViewContainer = view;
videoWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
activityNonVideoView.setVisibility(View.GONE);
activityVideoView.addView(videoViewContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
activityVideoView.setVisibility(View.VISIBLE);
isVideoFullscreen = …Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题,但我找不到一个简单的解决方案:
我有一个Excel文件(总是相同的),有几个非IT同事希望能够更新的WorkSheets,以便它还可以更新Google Charts(或其他图表API,你可以建议我)网页.
(顺便说一下,我只需要每个工作表的某个部分,所以如果你知道一种方法只提取我需要的东西那将是伟大的:))
我想避免服务器端操作但是因为我想读取本地文件所以可能不可能.
我已经研究了使用xlsx.js转换为JSON或加载为base64字符串的方法,但我发现我的同事很容易使用它们.
非常感谢你.
如果它可以帮助任何人,我找到了一种完全符合我想要的方法:
首先,我将所需的所有数据放在一个csv文件中.
然后,我使用HTML5 FileAPI来读取我用文件输入加载的csv文件.
最后,我使用cvstojson脚本来解析文件,然后按照我想要的方式将其传递给谷歌图形数据表.
但是,这只允许加载一次数据所以我在文件加载后使用按钮样式的标签来触发隐藏的"重置"按钮(实际上克隆的不仅仅是重置),所以现在它看起来像一个按钮允许在我更改其中的数据后多次加载文件.我还使用jQuery的localStorage来填充我的json.我知道这很乱,所以这里有一个代码提取:
<div id="load">
<button id="clear">Clear</button>
<label id="forcvs" for="cvs" > Load data </label>
<input type="file" id="cvs" onchange="handleFiles(this.files);" accept=".csv"><br/>
</div>
Run Code Online (Sandbox Code Playgroud)
"handleFiles"函数导致cvstojson脚本:
var json = JSON.parse(localStorage.getItem('json'))
function handleFiles(files) {
// Check for the various File API support.
if (window.FileReader) {
// FileReader are supported.
getAsText(files[0]);
} else {
alert('FileReader are not supported in this browser.');
}
}
function getAsText(fileToRead) {
var reader = new FileReader();
// Read file into memory …Run Code Online (Sandbox Code Playgroud) android ×1
excel ×1
fullscreen ×1
java ×1
javascript ×1
jquery ×1
nspredicate ×1
regex ×1
swift ×1
video ×1
xlsx ×1
youtube ×1