小编use*_*900的帖子

bash中的字符串比较.[[: 未找到

我试图比较bash中的字符串.我已经找到了关于如何在stackoverflow上执行此操作的答案.在我尝试的脚本中,我使用的是Adam在提到的问题中提交的代码:

#!/bin/bash
string='My string';

if [[ "$string" == *My* ]]
then
  echo "It's there!";
fi

needle='y s'
if [[ "$string" == *"$needle"* ]]; then
  echo "haystack '$string' contains needle '$needle'"
fi
Run Code Online (Sandbox Code Playgroud)

我也尝试过你可以在第二篇文章中找到的ubuntuforums方法

if [[ $var =~ regexp ]]; then
  #do something
fi
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都收到错误:

[[: not found
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

bash shell string-comparison ubuntu-11.04

138
推荐指数
6
解决办法
13万
查看次数

在Java中复制对象

我了解到,当您在Java中修改变量时,它不会更改它所基于的变量

int a = new Integer(5);
int b = a;
b = b + b;
System.out.println(a); // 5 as expected
System.out.println(b); // 10 as expected
Run Code Online (Sandbox Code Playgroud)

我假设对象有类似的东西.考虑这个课程.

public class SomeObject {
    public String text;

    public SomeObject(String text) {
        this.setText(text);
    }

    public String getText() {
        return text;
    }   

    public void setText(String text) {
        this.text = text;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我尝试这段代码后,我感到困惑.

SomeObject s1 = new SomeObject("first");
SomeObject s2 = s1;
s2.setText("second");
System.out.println(s1.getText()); // second as UNexpected
System.out.println(s2.getText()); // second as expected
Run Code Online (Sandbox Code Playgroud)

请向我解释为什么更改任何对象会影响另一个对象.我知道变量文本的值存储在两个对象的内存中的相同位置.

为什么变量的值是独立的但与对象相关?

另外,如果简单的赋值不能完成工作,如何复制SomeObject?

java variables pointers reference object

71
推荐指数
4
解决办法
5万
查看次数

使用变量存储值或直接从对象获取值?

场景是我需要至少访问两次值.即我正在使用记录器来跟踪应用程序中发生的情况.我想记录对象的名称,该函数正在处理,稍后使用相同的名称执行某些操作(即检查它是否包含某些字符串或将其放入数组中).

将名称存储在变量中:

foo(Bar bar){
    String name = bar.getName();
    logger.info("I am working with "+name);
    this.doSomethingWith(name);
}
Run Code Online (Sandbox Code Playgroud)

或者两次调用getName():

foo(Bar bar){
    logger.info("I am working with "+bar.getName());
    this.doSomethingWith(bar.getName());
}
Run Code Online (Sandbox Code Playgroud)

我理解,在第一个场景中,我将创建一个新的String,为其赋值,然后两次检索该值.这样我使用更多的内存资源,对吗?

在第二种情况下,我是否访问了对象栏两次,然后两次访问它的名称.我想这不是一种干燥方法.但另一方面,我不是在记忆中重复自己,对吗?

哪种方法更好?

java memory variables resources

5
推荐指数
1
解决办法
1336
查看次数

java文件的大小是否有限制?

我正在开发一个项目,我需要生成java代码.当我遇到主方法上65535字节限制的问题时,我正在做一些测试.我生成的文件看起来像这样:

public class foo{
    public static void main(String[] args){
        //
        //7000 lines later
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为通过这种方式生成文件我很聪明:

public class foo{
    public static void bar(){
        //
        //7000 lines later
        //
    }
    public static void main(String[] args){
        bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我发现65535字节限制适用于每种方法.

我想知道在多种方法中"缓冲"指令是否能解决我的问题.对java文件的大小有什么限制吗?

java file-io filesize

1
推荐指数
1
解决办法
234
查看次数

如何使用sed从bash中的字符串中删除转义字符?

我需要从 bash 中的字符串中删除转义字符。我得到一个数据结构,其中包含带有 / 转义的 url 路径,因此我收到了常规链接:

http://stackoverflow.com/questions/ask
Run Code Online (Sandbox Code Playgroud)

作为转义 / 之一:

http:\/\/stackoverflow.com\/questions\/ask
Run Code Online (Sandbox Code Playgroud)

现在我需要从第二个链接中删除 \。为此,我尝试使用 sed

 `echo '"'${paths[$index]}'"' | sed "s@\\@@g"`
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

sed: -e expression #1, char 6: unterminated `s' command
Run Code Online (Sandbox Code Playgroud)

如果我用 ie 替换 \\ 。_ 它就像一个魅力,并删除字符串中所有出现的 _。如何使用 sed 去除字符串中的转义字符?

unix bash escaping sed character

1
推荐指数
1
解决办法
9108
查看次数