我编写了以下方法来查看特定文件是否仅包含ASCII文本字符或控制字符除此之外.你能看一下这段代码,建议改进并指出疏忽吗?
逻辑如下:"如果文件的前500个字节包含5个或更多控制字符 - 将其报告为二进制文件"
谢谢.
public boolean isAsciiText(String fileName) throws IOException {
InputStream in = new FileInputStream(fileName);
byte[] bytes = new byte[500];
in.read(bytes, 0, bytes.length);
int x = 0;
short bin = 0;
for (byte thisByte : bytes) {
char it = (char) thisByte;
if (!Character.isWhitespace(it) && Character.isISOControl(it)) {
bin++;
}
if (bin >= 5) {
return false;
}
x++;
}
in.close();
return true;
}
Run Code Online (Sandbox Code Playgroud) 给定2个数组Array1 = {a,b,c...n},Array2 = {10,20,15....x}如何生成所有可能的组合作为字符串a(i)b(j)c(k)n(p)
其中
1 <= i <= 10, 1 <= j <= 20 , 1 <= k <= 15, .... 1 <= p <= x
Run Code Online (Sandbox Code Playgroud)
如:
a1 b1 c1 .... n1
a1 b1 c1..... n2
......
......
a10 b20 c15 nx (last combination)
Run Code Online (Sandbox Code Playgroud)
所以在所有组合的总数=元素的产品 array2 =
(10 X 20 X 15 X ..X x)
类似于笛卡尔积,其中第二个数组定义第一个数组中每个元素的上限.
固定数字的示例,
Array x = [a,b,c]
Array y = [3,2,4]
Run Code Online (Sandbox Code Playgroud)
所以我们将有3*2*4 = 24种组合.结果应该是:
a1 b1 c1
a1 b1 …Run Code Online (Sandbox Code Playgroud) 当Rails函数要求翻译(I18n.translate)时,我不想分析他们的代码以获得确切的范围等.
如何为每个要求的字符串添加调试输出到控制台?
例子:
I18n.t 'errors.messages.invalid', :scope => :active_record
# Translation for 'activerecord.errors.messages.invalid' (not) found
label(:post, :title)
# Translation for 'activerecord.attributes.post.title' not found
# Translation for 'views.labels.post.title' not found
Run Code Online (Sandbox Code Playgroud) 我有一个显然占用太多内存的.JAR,并抛出异常"Java堆空间"(或类似的东西).
所以我尝试通过CMD运行.JAR,如下所示:
C:\MyFolder>javaw -jar MyJar.jar -Xms64m -Xmx128m
Run Code Online (Sandbox Code Playgroud)
那并没有解决问题.同样的错误.现在,当我检查Windows任务管理器中的进程选项卡时,我注意到我的jar进程比我要求的内存少得多(与没有参数运行它相同).
为什么忽略参数?
此外,我认为异常是在进程达到100mb内存使用量的时候抛出的.GC是否有可能试图释放内存,这是导致问题的原因?我可以为GC设置任何参数来防止这种情况吗?
谢谢,Malki :)
是否有任何特殊原因在C++中不允许使用以下多行字符串文字?
string script =
"
Some
Formatted
String Literal
";
Run Code Online (Sandbox Code Playgroud)
我知道可以通过在每个换行符之前放一个反斜杠来创建多行字符串文字.我正在编写一种编程语言(类似于C),并希望能够轻松创建多行字符串(如上例所示).
是否有任何技术原因可以避免这种字符串文字?否则我将不得不使用类似python的字符串文字和三重引号(我不想这样做):
string script =
"""
Some
Formatted
String Literal
""";
Run Code Online (Sandbox Code Playgroud)
为什么C/C++字符串文字声明必须是单行的?
如何使用PHP preg_replace函数制作正则表达式模式,删除所有不适合某种模式的字符.例如:
[a-zA-Z0-9]
Run Code Online (Sandbox Code Playgroud) 我有一个这样的课:
public class Utils {
public static void doSomething() {
// doSomething code
}
public static void doSomethingElse() {
// doSomethingElse code
}
}
Run Code Online (Sandbox Code Playgroud)
我希望两个方法同步但不能彼此同步,即没有两个线程可以同时处理doSomething()方法,没有两个线程可以同时处理doSomethingElse()但是线程可以处理doSomething()方法和另一个方法同时处理doSomethingElse()方法.
我实现了这样的事情:
public class Utils {
private static final String DO_SOMETHING_LOCK = "DO_SOMETHING_LOCK";
private static final String DO_SOMETHING_ELSE_LOCK = "DO_SOMETHING_ELSE_LOCK";
public static void doSomething() {
synchronized(DO_SOMETHING_LOCK) {
// doSomething code
}
}
public static void doSomethingElse() {
synchronized(DO_SOMETHING_ELSE_LOCK) {
// doSomethingElse code
}
}
Run Code Online (Sandbox Code Playgroud)
我看到Scott Stanchfield的回应在这里采用了类似的方法:
但这是最好的方法吗?对我来说似乎有些笨拙,创造了两个对象,只是用于锁定 - 有更好的方法吗?
我有一个具有以下属性的类:
public List<CommitmentItem<ITransaction, ITransactionItem>> CommitmentItems;
public List<CapitalCallCommitmentItem> CapitalCallCommitmentItems;
Run Code Online (Sandbox Code Playgroud)
CapitalCallCommitmentItem继承CommitmentItem.我希望CapitalCallCommitmentItems属性返回CommitmentItems类型为CapitalCallCommitmentItem的所有内容.所以我尝试了这段代码:
get
{
return CommitmentItems
.Where(c => c.GetType() == typeof(CapitalCallCommitmentItem))
.Select(c => (CapitalCallCommitmentItem)c)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误说:
错误1无法将类型'Models.CommitmentItem'转换为'Models.CapitalCallCommitmentItem'
这样做的正确方法是什么?